From 392817d852d50b0f0a465c762d5d4b5bf16062ea Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Mon, 6 Feb 2023 20:28:55 -0800 Subject: [PATCH] Started updating tools to C++ --- assets/games/pokergame/scripty.docx | Bin 13586 -> 13887 bytes .../display/texturegen/CMakeLists.txt | 46 +-- .../display/texturegen/{main.c => main.cpp} | 174 ++++++----- .../display/tilesetgen/CMakeLists.txt | 46 +-- .../display/tilesetgen/{main.c => main.cpp} | 294 +++++++++--------- .../display/truetypegen/CMakeLists.txt | 46 +-- .../display/truetypegen/{main.c => main.cpp} | 282 ++++++++--------- 7 files changed, 447 insertions(+), 441 deletions(-) rename src/dawntools/display/texturegen/{main.c => main.cpp} (83%) rename src/dawntools/display/tilesetgen/{main.c => main.cpp} (89%) rename src/dawntools/display/truetypegen/{main.c => main.cpp} (84%) diff --git a/assets/games/pokergame/scripty.docx b/assets/games/pokergame/scripty.docx index 8250b7b5e53445ba6c6529f12fee4fb57e5b78ad..7cacd8c1c2be97df1832a9db9b6d0274b9f87131 100644 GIT binary patch delta 11565 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 delta 11290 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 diff --git a/src/dawntools/display/texturegen/CMakeLists.txt b/src/dawntools/display/texturegen/CMakeLists.txt index 37856eae..29dd69af 100644 --- a/src/dawntools/display/texturegen/CMakeLists.txt +++ b/src/dawntools/display/texturegen/CMakeLists.txt @@ -1,24 +1,24 @@ -# Copyright (c) 2021 Dominic Msters -# -# This software is released under the MIT License. -# https://opensource.org/licenses/MIT - -# Texture Build Tool -project(texturegen VERSION 1.0) -add_executable(texturegen) -target_sources(texturegen - PRIVATE - main.c - ../../utils/file.c - ../../utils/image.c -) -target_include_directories(texturegen - PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/../../ - ${CMAKE_CURRENT_LIST_DIR} -) -target_link_libraries(texturegen - PUBLIC - ${DAWN_BUILD_HOST_LIBS} - stb +# Copyright (c) 2021 Dominic Msters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Texture Build Tool +project(texturegen VERSION 1.0) +add_executable(texturegen) +target_sources(texturegen + PRIVATE + main.cpp + ../../utils/file.c + ../../utils/image.c +) +target_include_directories(texturegen + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/../../ + ${CMAKE_CURRENT_LIST_DIR} +) +target_link_libraries(texturegen + PUBLIC + ${DAWN_BUILD_HOST_LIBS} + stb ) \ No newline at end of file diff --git a/src/dawntools/display/texturegen/main.c b/src/dawntools/display/texturegen/main.cpp similarity index 83% rename from src/dawntools/display/texturegen/main.c rename to src/dawntools/display/texturegen/main.cpp index dba01e5d..79c93d4c 100644 --- a/src/dawntools/display/texturegen/main.c +++ b/src/dawntools/display/texturegen/main.cpp @@ -1,87 +1,89 @@ -/** - * Copyright (c) 2021 Dominic Masters - * - * This software is released under the MIT License. - * https://opensource.org/licenses/MIT - */ - -#include "../../utils/common.h" -#include "../../utils/file.h" -#include "../../utils/image.h" - -int main(int argc, char *argv[]) { - FILE *file; - char path[FILENAME_MAX + 1]; - uint8_t headerBuffer[32]; - char *in; - char *out; - int w, h, channels, headerBufferLength; - stbi_uc *dataImageRaw, dataIn; - float *dataImage; - size_t i, len; - - if(argc != 3) { - printf("Invalid number of arguments\n"); - return 1; - } - - // Set up strings - in = argv[1]; - out = argv[2]; - - // Normalize slashes - fileNormalizeSlashes(in); - fileNormalizeSlashes(out); - - // Check the output doesn't already exist - sprintf(path, "%s.texture", out); - file = fopen(path, "rb"); - if(file != NULL) { - fclose(file); - return 0; - } - - // Read in original texture - file = fopen(in, "rb"); - if(file == NULL) { - printf("Failed to open file!\n"); - return 1; - } - - dataImageRaw = stbi_load_from_file(file, &w, &h, &channels, STBI_rgb_alpha); - if(dataImageRaw == NULL) { - printf("Failed to load input texture!\n"); - return 1; - } - fclose(file); - - // Convert to floating points - len = STBI_rgb_alpha * w * h; - dataImage = malloc(sizeof(float) * len); - for(i = 0; i < len; i++) { - dataIn = dataImageRaw[i]; - dataImage[i] = ((float)dataIn) / 255.0f; - } - stbi_image_free(dataImageRaw); - - // Open output file - fileMkdirp(path); - file = fopen(path, "wb"); - if(file == NULL) { - printf("Invalid texture file out!\n"); - return 1; - } - - // Write info - headerBufferLength = sprintf(headerBuffer, "%i|%i|", w, h); - fwrite(headerBuffer, sizeof(uint8_t), headerBufferLength, file); - - // Write texture - fwrite(dataImage, sizeof(float), len, file); - - // Cleanup - fclose(file); - free(dataImage); - - return 0; +/** + * Copyright (c) 2021 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +extern "C" { + #include "../../utils/common.h" + #include "../../utils/file.h" + #include "../../utils/image.h" +} + +int main(int argc, char *argv[]) { + FILE *file; + char path[FILENAME_MAX + 1]; + uint8_t headerBuffer[32]; + char *in; + char *out; + int w, h, channels, headerBufferLength; + stbi_uc *dataImageRaw, dataIn; + float *dataImage; + size_t i, len; + + if(argc != 3) { + printf("Invalid number of arguments\n"); + return 1; + } + + // Set up strings + in = argv[1]; + out = argv[2]; + + // Normalize slashes + fileNormalizeSlashes(in); + fileNormalizeSlashes(out); + + // Check the output doesn't already exist + sprintf(path, "%s.texture", out); + file = fopen(path, "rb"); + if(file != NULL) { + fclose(file); + return 0; + } + + // Read in original texture + file = fopen(in, "rb"); + if(file == NULL) { + printf("Failed to open file!\n"); + return 1; + } + + dataImageRaw = stbi_load_from_file(file, &w, &h, &channels, STBI_rgb_alpha); + if(dataImageRaw == NULL) { + printf("Failed to load input texture!\n"); + return 1; + } + fclose(file); + + // Convert to floating points + len = STBI_rgb_alpha * w * h; + dataImage = (float *)malloc(sizeof(float) * len); + for(i = 0; i < len; i++) { + dataIn = dataImageRaw[i]; + dataImage[i] = ((float)dataIn) / 255.0f; + } + stbi_image_free(dataImageRaw); + + // Open output file + fileMkdirp(path); + file = fopen(path, "wb"); + if(file == NULL) { + printf("Invalid texture file out!\n"); + return 1; + } + + // Write info + headerBufferLength = sprintf((char *)headerBuffer, "%i|%i|", w, h); + fwrite(headerBuffer, sizeof(uint8_t), headerBufferLength, file); + + // Write texture + fwrite(dataImage, sizeof(float), len, file); + + // Cleanup + fclose(file); + free(dataImage); + + return 0; } \ No newline at end of file diff --git a/src/dawntools/display/tilesetgen/CMakeLists.txt b/src/dawntools/display/tilesetgen/CMakeLists.txt index 3b502e77..7ffac01d 100644 --- a/src/dawntools/display/tilesetgen/CMakeLists.txt +++ b/src/dawntools/display/tilesetgen/CMakeLists.txt @@ -1,24 +1,24 @@ -# Copyright (c) 2021 Dominic Msters -# -# This software is released under the MIT License. -# https://opensource.org/licenses/MIT - -# Texture Build Tool -project(tilesetgen VERSION 1.0) -add_executable(tilesetgen) -target_sources(tilesetgen - PRIVATE - main.c - ../../utils/file.c - ../../utils/image.c -) -target_include_directories(tilesetgen - PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/../../ - ${CMAKE_CURRENT_LIST_DIR} -) -target_link_libraries(tilesetgen - PUBLIC - ${DAWN_BUILD_HOST_LIBS} - stb +# Copyright (c) 2021 Dominic Msters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Texture Build Tool +project(tilesetgen VERSION 1.0) +add_executable(tilesetgen) +target_sources(tilesetgen + PRIVATE + main.cpp + ../../utils/file.c + ../../utils/image.c +) +target_include_directories(tilesetgen + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/../../ + ${CMAKE_CURRENT_LIST_DIR} +) +target_link_libraries(tilesetgen + PUBLIC + ${DAWN_BUILD_HOST_LIBS} + stb ) \ No newline at end of file diff --git a/src/dawntools/display/tilesetgen/main.c b/src/dawntools/display/tilesetgen/main.cpp similarity index 89% rename from src/dawntools/display/tilesetgen/main.c rename to src/dawntools/display/tilesetgen/main.cpp index 9afac5fd..26b23249 100644 --- a/src/dawntools/display/tilesetgen/main.c +++ b/src/dawntools/display/tilesetgen/main.cpp @@ -1,147 +1,149 @@ -/** - * Copyright (c) 2022 Dominic Masters - * - * This software is released under the MIT License. - * https://opensource.org/licenses/MIT - */ - -#include "../../utils/common.h" -#include "../../utils/file.h" -#include "../../utils/image.h" - -int main(int argc, char *argv[]) { - char *in; - char *out; - FILE *file; - char path[FILENAME_MAX + 1]; - int w, h, channels, cols, rows; - stbi_uc *dataImageRaw; - int gapX, gapY, borderX, borderY; - - if(argc < 5) { - printf("Invalid number of arguments"); - return 1; - } - - in = argv[1]; - out = argv[2]; - gapX = 0, gapY = 0, borderX = 0, borderY = 0; - - cols = atoi(argv[3]); - if(cols <= 0) { - printf("Columns is invalid\n"); - return 1; - } - - rows = atoi(argv[4]); - if(rows <= 0) { - printf("Rows is invalid"); - return 1; - } - - if(argc >= 6) { - gapX = atoi(argv[5]); - if(gapX <= 0) { - printf("Gap X is invalid\n"); - return 1; - } - } - - if(argc >= 7) { - gapY = atoi(argv[6]); - if(gapY <= 0) { - printf("Gap Y is invalid\n"); - return 1; - } - } - - if(argc >= 8) { - borderX = atoi(argv[7]); - if(borderX <= 0) { - printf("Border X is invalid\n"); - return 1; - } - } - - if(argc >= 9) { - borderY = atoi(argv[8]); - if(borderY <= 0) { - printf("Border Y is invalid\n"); - return 1; - } - } - - // Normalize slashes - fileNormalizeSlashes(in); - fileNormalizeSlashes(out); - - // Check the output doesn't already exist - sprintf(path, "%s.tileset", out); - file = fopen(path, "rb"); - if(file != NULL) { - fclose(file); - return 0; - } - - // Read in the original texture - file = fopen(in, "rb"); - if(file == NULL) { - printf("Failed to open file!\n"); - return 1; - } - - // Read image data - dataImageRaw = stbi_load_from_file(file, &w, &h, &channels, STBI_rgb_alpha); - if(dataImageRaw == NULL) { - printf("Failed to load input texture!\n"); - return 1; - } - fclose(file); - free(dataImageRaw); - - if(w <= 0 || h <= 0) { - printf("Reading image failed (corrupted?)\n"); - return 1; - } - - // Calculate division sizes (pixels) - int divX = (w - (borderX * 2) - (gapX * (cols - 1))) / cols; - int divY = (h - (borderY * 2) - (gapY * (rows - 1))) / rows; - - // Calculate the division sizes (units) - float tdivX = (float)divX / (float)w; - float tdivY = (float)divY / (float)h; - - // Output buffer prep - char *buffer = malloc(sizeof(char) * (cols * rows * 48 + 48 + 48)); - buffer[0] = '\0'; - - sprintf(buffer, "%i|%i|%i|%i|", cols, rows, divX, divY); - - // Now prep tileset. - for(float y = 0; y < rows; y++) { - for(float x = 0; x < cols; x++) { - float ux0 = ((float)borderX + ((float)divX * x) + ((float)gapX * x)) / (float)w; - float ux1 = ux0 + tdivX; - float uy0 = ((float)borderY + ((float)divY * y) + ((float)gapY * y)) / (float)h; - float uy1 = uy0 + tdivY; - sprintf(buffer, "%s%f,%f,%f,%f|", buffer, ux0, ux1, uy0, uy1); - } - } - - // Open output file - fileMkdirp(path); - file = fopen(path, "wb"); - if(file == NULL) { - free(buffer); - printf("Invalid tileset file out!\n"); - return 1; - } - - // Write and close - fwrite(buffer, sizeof(char), strlen(buffer), file); - fclose(file); - free(buffer); - - return 0; +/** + * Copyright (c) 2022 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +extern "C" { + #include "../../utils/common.h" + #include "../../utils/file.h" + #include "../../utils/image.h" +} + +int main(int argc, char *argv[]) { + char *in; + char *out; + FILE *file; + char path[FILENAME_MAX + 1]; + int w, h, channels, cols, rows; + stbi_uc *dataImageRaw; + int gapX, gapY, borderX, borderY; + + if(argc < 5) { + printf("Invalid number of arguments"); + return 1; + } + + in = argv[1]; + out = argv[2]; + gapX = 0, gapY = 0, borderX = 0, borderY = 0; + + cols = atoi(argv[3]); + if(cols <= 0) { + printf("Columns is invalid\n"); + return 1; + } + + rows = atoi(argv[4]); + if(rows <= 0) { + printf("Rows is invalid"); + return 1; + } + + if(argc >= 6) { + gapX = atoi(argv[5]); + if(gapX <= 0) { + printf("Gap X is invalid\n"); + return 1; + } + } + + if(argc >= 7) { + gapY = atoi(argv[6]); + if(gapY <= 0) { + printf("Gap Y is invalid\n"); + return 1; + } + } + + if(argc >= 8) { + borderX = atoi(argv[7]); + if(borderX <= 0) { + printf("Border X is invalid\n"); + return 1; + } + } + + if(argc >= 9) { + borderY = atoi(argv[8]); + if(borderY <= 0) { + printf("Border Y is invalid\n"); + return 1; + } + } + + // Normalize slashes + fileNormalizeSlashes(in); + fileNormalizeSlashes(out); + + // Check the output doesn't already exist + sprintf(path, "%s.tileset", out); + file = fopen(path, "rb"); + if(file != NULL) { + fclose(file); + return 0; + } + + // Read in the original texture + file = fopen(in, "rb"); + if(file == NULL) { + printf("Failed to open file!\n"); + return 1; + } + + // Read image data + dataImageRaw = stbi_load_from_file(file, &w, &h, &channels, STBI_rgb_alpha); + if(dataImageRaw == NULL) { + printf("Failed to load input texture!\n"); + return 1; + } + fclose(file); + free(dataImageRaw); + + if(w <= 0 || h <= 0) { + printf("Reading image failed (corrupted?)\n"); + return 1; + } + + // Calculate division sizes (pixels) + int divX = (w - (borderX * 2) - (gapX * (cols - 1))) / cols; + int divY = (h - (borderY * 2) - (gapY * (rows - 1))) / rows; + + // Calculate the division sizes (units) + float tdivX = (float)divX / (float)w; + float tdivY = (float)divY / (float)h; + + // Output buffer prep + char *buffer = (char *)malloc(sizeof(char) * (cols * rows * 48 + 48 + 48)); + buffer[0] = '\0'; + + sprintf(buffer, "%i|%i|%i|%i|", cols, rows, divX, divY); + + // Now prep tileset. + for(float y = 0; y < rows; y++) { + for(float x = 0; x < cols; x++) { + float ux0 = ((float)borderX + ((float)divX * x) + ((float)gapX * x)) / (float)w; + float ux1 = ux0 + tdivX; + float uy0 = ((float)borderY + ((float)divY * y) + ((float)gapY * y)) / (float)h; + float uy1 = uy0 + tdivY; + sprintf(buffer, "%s%f,%f,%f,%f|", buffer, ux0, ux1, uy0, uy1); + } + } + + // Open output file + fileMkdirp(path); + file = fopen(path, "wb"); + if(file == NULL) { + free(buffer); + printf("Invalid tileset file out!\n"); + return 1; + } + + // Write and close + fwrite(buffer, sizeof(char), strlen(buffer), file); + fclose(file); + free(buffer); + + return 0; } \ No newline at end of file diff --git a/src/dawntools/display/truetypegen/CMakeLists.txt b/src/dawntools/display/truetypegen/CMakeLists.txt index e15f11bb..f446f893 100644 --- a/src/dawntools/display/truetypegen/CMakeLists.txt +++ b/src/dawntools/display/truetypegen/CMakeLists.txt @@ -1,24 +1,24 @@ -# Copyright (c) 2021 Dominic Msters -# -# This software is released under the MIT License. -# https://opensource.org/licenses/MIT - -# Texture Build Tool -project(truetypegen VERSION 1.0) -add_executable(truetypegen) -target_sources(truetypegen - PRIVATE - main.c - ../../utils/file.c - ../../utils/image.c -) -target_include_directories(truetypegen - PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/../../ - ${CMAKE_CURRENT_LIST_DIR} -) -target_link_libraries(truetypegen - PUBLIC - ${DAWN_BUILD_HOST_LIBS} - stb +# Copyright (c) 2021 Dominic Msters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +# Texture Build Tool +project(truetypegen VERSION 1.0) +add_executable(truetypegen) +target_sources(truetypegen + PRIVATE + main.cpp + ../../utils/file.c + ../../utils/image.c +) +target_include_directories(truetypegen + PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/../../ + ${CMAKE_CURRENT_LIST_DIR} +) +target_link_libraries(truetypegen + PUBLIC + ${DAWN_BUILD_HOST_LIBS} + stb ) \ No newline at end of file diff --git a/src/dawntools/display/truetypegen/main.c b/src/dawntools/display/truetypegen/main.cpp similarity index 84% rename from src/dawntools/display/truetypegen/main.c rename to src/dawntools/display/truetypegen/main.cpp index ddc0fc62..f1688b39 100644 --- a/src/dawntools/display/truetypegen/main.c +++ b/src/dawntools/display/truetypegen/main.cpp @@ -1,141 +1,143 @@ -/** - * Copyright (c) 2021 Dominic Masters - * - * This software is released under the MIT License. - * https://opensource.org/licenses/MIT - */ - -#include "../../utils/common.h" -#include "../../utils/file.h" -#include "../../utils/image.h" -#ifndef STB_TRUETYPE_IMPLEMENTATION - #define STB_TRUETYPE_IMPLEMENTATION - #include -#endif - -#define TRUETYPE_FIRST_CHAR 32 -#define TRUETYPE_NUM_CHARS 96 - -int main(int argc, char *args[]) { - FILE *file; - char path[FILENAME_MAX + 1]; - int32_t width, height, fontSize, textureSize; - - /* - args0 - PATH - args1 - Input Filename (TTF file) - args2 - Output Filename - args3 - Width of the output texture (Resolution X) - args4 - Height of the output texture (Resolution Y) - args5 - Font size to draw - */ - - if(argc != 6) { - printf("Invalid number of arguments\n"); - return 1; - } - - char *fileIn = args[1]; - char *fileOut = args[2]; - char *strWidth = args[3]; - char *strHeight = args[4]; - char *strFontSize = args[5]; - - // Normalize slashes - fileNormalizeSlashes(fileIn); - fileNormalizeSlashes(fileOut); - - // Check the output doesn't already exist - sprintf(path, "%s.truetype", fileOut); - file = fopen(path, "rb"); - if(file != NULL) { - fclose(file); - return 0; - } - - width = atoi(strWidth); - if(width <= 0) { - printf("Width is invalid.\n"); - return 1; - } - - height = atoi(strHeight); - if(height <= 0) { - printf("Height is invalid.\n"); - return 1; - } - - fontSize = atoi(strFontSize); - if(fontSize <= 0) { - printf("Font size is invalid.\n"); - return 1; - } - - // Read in the TTF data - file = fopen(fileIn, "rb"); - if(file == NULL) { - printf("Failed to open input TTF file.\n"); - return 1; - } - - // Seek to end, get length, seek back to start. - fseek(file, 0, SEEK_END); - size_t fileSize = ftell(file); - fseek(file, 0, SEEK_SET); - - // Read in all data - char *ttfData = malloc(sizeof(char) * fileSize); - size_t readSize = fread(ttfData, 1, fileSize, file); - fclose(file); - if(readSize < fileSize) { - free(ttfData); - printf("Failed to read all data form TTF\n"); - return 1; - } - - // Create bitmap data. This is a single channel color (alpha). - textureSize = width * height; - stbi_uc *bitmapData = malloc(sizeof(stbi_uc) * textureSize); - stbtt_bakedchar characterData[TRUETYPE_NUM_CHARS]; - - // Now parse the TTF itself. - stbtt_BakeFontBitmap( - ttfData, 0, (float)fontSize, bitmapData, - width, height, - TRUETYPE_FIRST_CHAR, TRUETYPE_NUM_CHARS, - characterData - ); - - // Prepare output file for writing. - sprintf(path, "%s.truetype", fileOut); - fileMkdirp(path); - file = fopen(path, "wb"); - if(file == NULL) { - printf("Failed to create output TTF file\n"); - return 1; - } - - // Now prepare output data. - char headerBuffer[64]; - int32_t headerBufferLength = sprintf( - headerBuffer, "%i|%i|%i|", width, height, fontSize - ); - fwrite(headerBuffer, sizeof(char), headerBufferLength, file); - - // Write output pixels. - float outputPixels[4]; - for(int32_t i = 0; i < textureSize; i++) { - outputPixels[0] = 1.0f; - outputPixels[1] = 1.0f; - outputPixels[2] = 1.0f; - outputPixels[3] = ((float)bitmapData[i]) / 255.0f; - fwrite(outputPixels, sizeof(float), 4, file); - } - - // Now write output quads data. - fwrite(characterData, sizeof(stbtt_bakedchar), TRUETYPE_NUM_CHARS, file); - fclose(file); - free(bitmapData); - - return 0; +/** + * Copyright (c) 2021 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +extern "C" { + #include "../../utils/common.h" + #include "../../utils/file.h" + #include "../../utils/image.h" + #ifndef STB_TRUETYPE_IMPLEMENTATION + #define STB_TRUETYPE_IMPLEMENTATION + #include + #endif +} + +#define TRUETYPE_FIRST_CHAR 32 +#define TRUETYPE_NUM_CHARS 96 + +int main(int argc, char *args[]) { + FILE *file; + char path[FILENAME_MAX + 1]; + int32_t width, height, fontSize, textureSize; + + /* + args0 - PATH + args1 - Input Filename (TTF file) + args2 - Output Filename + args3 - Width of the output texture (Resolution X) + args4 - Height of the output texture (Resolution Y) + args5 - Font size to draw + */ + + if(argc != 6) { + printf("Invalid number of arguments\n"); + return 1; + } + + char *fileIn = args[1]; + char *fileOut = args[2]; + char *strWidth = args[3]; + char *strHeight = args[4]; + char *strFontSize = args[5]; + + // Normalize slashes + fileNormalizeSlashes(fileIn); + fileNormalizeSlashes(fileOut); + + // Check the output doesn't already exist + sprintf(path, "%s.truetype", fileOut); + file = fopen(path, "rb"); + if(file != NULL) { + fclose(file); + return 0; + } + + width = atoi(strWidth); + if(width <= 0) { + printf("Width is invalid.\n"); + return 1; + } + + height = atoi(strHeight); + if(height <= 0) { + printf("Height is invalid.\n"); + return 1; + } + + fontSize = atoi(strFontSize); + if(fontSize <= 0) { + printf("Font size is invalid.\n"); + return 1; + } + + // Read in the TTF data + file = fopen(fileIn, "rb"); + if(file == NULL) { + printf("Failed to open input TTF file.\n"); + return 1; + } + + // Seek to end, get length, seek back to start. + fseek(file, 0, SEEK_END); + size_t fileSize = ftell(file); + fseek(file, 0, SEEK_SET); + + // Read in all data + char *ttfData = (char*)malloc(sizeof(char) * fileSize); + size_t readSize = fread(ttfData, 1, fileSize, file); + fclose(file); + if(readSize < fileSize) { + free(ttfData); + printf("Failed to read all data form TTF\n"); + return 1; + } + + // Create bitmap data. This is a single channel color (alpha). + textureSize = width * height; + stbi_uc *bitmapData = (stbi_uc*)malloc(sizeof(stbi_uc) * textureSize); + stbtt_bakedchar characterData[TRUETYPE_NUM_CHARS]; + + // Now parse the TTF itself. + stbtt_BakeFontBitmap( + (uint8_t*)ttfData, 0, (float)fontSize, bitmapData, + width, height, + TRUETYPE_FIRST_CHAR, TRUETYPE_NUM_CHARS, + characterData + ); + + // Prepare output file for writing. + sprintf(path, "%s.truetype", fileOut); + fileMkdirp(path); + file = fopen(path, "wb"); + if(file == NULL) { + printf("Failed to create output TTF file\n"); + return 1; + } + + // Now prepare output data. + char headerBuffer[64]; + int32_t headerBufferLength = sprintf( + headerBuffer, "%i|%i|%i|", width, height, fontSize + ); + fwrite(headerBuffer, sizeof(char), headerBufferLength, file); + + // Write output pixels. + float outputPixels[4]; + for(int32_t i = 0; i < textureSize; i++) { + outputPixels[0] = 1.0f; + outputPixels[1] = 1.0f; + outputPixels[2] = 1.0f; + outputPixels[3] = ((float)bitmapData[i]) / 255.0f; + fwrite(outputPixels, sizeof(float), 4, file); + } + + // Now write output quads data. + fwrite(characterData, sizeof(stbtt_bakedchar), TRUETYPE_NUM_CHARS, file); + fclose(file); + free(bitmapData); + + return 0; } \ No newline at end of file