bugfixing

main
cosmonaut 2022-04-12 19:29:19 -07:00
parent 6a86f5b533
commit 2fe40f7624
2 changed files with 31 additions and 11 deletions

View File

@ -161,6 +161,7 @@ WELLSPRINGAPI void Wellspring_DestroyPacker(Wellspring_Packer *packer);
#define Wellspring_fabs SDL_fabs #define Wellspring_fabs SDL_fabs
#define Wellspring_assert SDL_assert #define Wellspring_assert SDL_assert
#define Wellspring_strlen SDL_strlen #define Wellspring_strlen SDL_strlen
#define Wellspring_sort SDL_qsort
#else #else
@ -178,6 +179,7 @@ WELLSPRINGAPI void Wellspring_DestroyPacker(Wellspring_Packer *packer);
#define Wellspring_fabs fabs #define Wellspring_fabs fabs
#define Wellspring_assert assert #define Wellspring_assert assert
#define Wellspring_strlen strlen #define Wellspring_strlen strlen
#define Wellspring_sort qsort
#endif #endif

View File

@ -25,7 +25,6 @@
*/ */
#include "Wellspring.h" #include "Wellspring.h"
#include "stb_rect_pack.h"
#define STBTT_malloc(x,u) ((void)(u),Wellspring_malloc(x)) #define STBTT_malloc(x,u) ((void)(u),Wellspring_malloc(x))
#define STBTT_free(x,u) ((void)(u),Wellspring_free(x)) #define STBTT_free(x,u) ((void)(u),Wellspring_free(x))
@ -42,6 +41,9 @@
#define STBTT_assert Wellspring_assert #define STBTT_assert Wellspring_assert
#define STBTT_strlen Wellspring_strlen #define STBTT_strlen Wellspring_strlen
#define STBRP_SORT Wellspring_sort
#define STBRP_ASSERT Wellspring_assert
typedef uint8_t stbtt_uint8; typedef uint8_t stbtt_uint8;
typedef int8_t stbtt_int8; typedef int8_t stbtt_int8;
typedef uint16_t stbtt_uint16; typedef uint16_t stbtt_uint16;
@ -49,11 +51,18 @@ typedef int16_t stbtt_int16;
typedef uint32_t stbtt_uint32; typedef uint32_t stbtt_uint32;
typedef int32_t stbtt_int32; typedef int32_t stbtt_int32;
#pragma GCC diagnostic ignored "-Wunused-function"
#define STBRP_STATIC
#define STB_RECT_PACK_IMPLEMENTATION
#include "stb_rect_pack.h"
#define STBTT_STATIC #define STBTT_STATIC
#define STB_TRUETYPE_IMPLEMENTATION #define STB_TRUETYPE_IMPLEMENTATION
#pragma GCC diagnostic ignored "-Wunused-function"
#include "stb_truetype.h" #include "stb_truetype.h"
#pragma GCC diagnostic warning "-Wunused-function"
#define INITIAL_QUAD_CAPACITY 128 #define INITIAL_QUAD_CAPACITY 128
/* Structs */ /* Structs */
@ -200,8 +209,7 @@ uint32_t Wellspring_PackFontRanges(
return 0; return 0;
} }
myPacker->rangeCount += numRanges; myPacker->ranges = Wellspring_realloc(myPacker->ranges, sizeof(CharRange) * (myPacker->rangeCount + numRanges));
myPacker->ranges = Wellspring_realloc(myPacker->ranges, sizeof(CharRange) * myPacker->rangeCount);
for (i = 0; i < numRanges; i += 1) for (i = 0; i < numRanges; i += 1)
{ {
@ -212,7 +220,6 @@ uint32_t Wellspring_PackFontRanges(
} }
myPacker->rangeCount += numRanges; myPacker->rangeCount += numRanges;
return 1; return 1;
} }
@ -267,7 +274,7 @@ uint8_t Wellspring_Draw(
stbtt_aligned_quad charQuad; stbtt_aligned_quad charQuad;
uint32_t vertexBufferIndex; uint32_t vertexBufferIndex;
uint32_t indexBufferIndex; uint32_t indexBufferIndex;
uint32_t i; uint32_t i, j;
for (i = 0; i < strLength; i += 1) for (i = 0; i < strLength; i += 1)
{ {
@ -282,18 +289,27 @@ uint8_t Wellspring_Draw(
continue; continue;
} }
rangeData = NULL;
/* Find the packed char data */ /* Find the packed char data */
for (i = 0; i < myPacker->rangeCount; i += 1) for (j = 0; j < myPacker->rangeCount; j += 1)
{ {
if ( if (
codepoint >= myPacker->ranges[i].firstCodepoint && codepoint >= myPacker->ranges[j].firstCodepoint &&
codepoint < myPacker->ranges[i].firstCodepoint + myPacker->ranges[i].charCount codepoint < myPacker->ranges[j].firstCodepoint + myPacker->ranges[j].charCount
) { ) {
rangeData = myPacker->ranges[i].data; rangeData = myPacker->ranges[j].data;
glyphIndex = codepoint - myPacker->ranges[i].firstCodepoint; glyphIndex = codepoint - myPacker->ranges[j].firstCodepoint;
break;
} }
} }
if (rangeData == NULL)
{
/* Requested char wasn't packed! */
return 0;
}
stbtt_GetPackedQuad( stbtt_GetPackedQuad(
rangeData, rangeData,
myPacker->width, myPacker->width,
@ -403,6 +419,8 @@ void Wellspring_DestroyPacker(Wellspring_Packer *packer)
Packer* myPacker = (Packer*) packer; Packer* myPacker = (Packer*) packer;
uint32_t i; uint32_t i;
stbtt_PackEnd(myPacker->context);
for (i = 0; i < myPacker->rangeCount; i += 1) for (i = 0; i < myPacker->rangeCount; i += 1)
{ {
Wellspring_free(myPacker->ranges[i].data); Wellspring_free(myPacker->ranges[i].data);