diff --git a/src/api/graphics.c b/src/api/graphics.c index 7c9ced50..14c3a119 100644 --- a/src/api/graphics.c +++ b/src/api/graphics.c @@ -852,13 +852,14 @@ static int l_lovrGraphicsSkybox(lua_State* L) { } static int l_lovrGraphicsPrint(lua_State* L) { - const char* str = luaL_checkstring(L, 1); + size_t length; + const char* str = luaL_checklstring(L, 1, &length); float transform[16]; int index = luax_readmat4(L, 2, transform, 1, NULL); float wrap = luaL_optnumber(L, index++, 0); HorizontalAlign halign = luaL_checkoption(L, index++, "center", HorizontalAligns); VerticalAlign valign = luaL_checkoption(L, index++, "middle", VerticalAligns); - lovrGraphicsPrint(str, transform, wrap, halign, valign); + lovrGraphicsPrint(str, length, transform, wrap, halign, valign); return 0; } diff --git a/src/graphics/font.c b/src/graphics/font.c index c5f38055..c85dfe37 100644 --- a/src/graphics/font.c +++ b/src/graphics/font.c @@ -68,7 +68,7 @@ Rasterizer* lovrFontGetRasterizer(Font* font) { return font->rasterizer; } -void lovrFontRender(Font* font, const char* str, float wrap, HorizontalAlign halign, VerticalAlign valign, float* vertices, float* offsety, uint32_t* vertexCount) { +void lovrFontRender(Font* font, const char* str, size_t length, float wrap, HorizontalAlign halign, VerticalAlign valign, float* vertices, float* offsety, uint32_t* vertexCount) { FontAtlas* atlas = &font->atlas; float cx = 0; @@ -77,9 +77,8 @@ void lovrFontRender(Font* font, const char* str, float wrap, HorizontalAlign hal float v = atlas->height; float scale = 1 / font->pixelDensity; - int len = strlen(str); const char* start = str; - const char* end = str + len; + const char* end = str + length; unsigned int previous = '\0'; unsigned int codepoint; size_t bytes; @@ -119,7 +118,7 @@ void lovrFontRender(Font* font, const char* str, float wrap, HorizontalAlign hal // Start over if texture was repacked if (u != atlas->width || v != atlas->height) { - lovrFontRender(font, start, wrap, halign, valign, vertices, offsety, vertexCount); + lovrFontRender(font, start, length, wrap, halign, valign, vertices, offsety, vertexCount); return; } diff --git a/src/graphics/font.h b/src/graphics/font.h index 103a6525..3308e6eb 100644 --- a/src/graphics/font.h +++ b/src/graphics/font.h @@ -42,7 +42,7 @@ Font* lovrFontInit(Font* font, Rasterizer* rasterizer); #define lovrFontCreate(...) lovrFontInit(lovrAlloc(Font), __VA_ARGS__) void lovrFontDestroy(void* ref); Rasterizer* lovrFontGetRasterizer(Font* font); -void lovrFontRender(Font* font, const char* str, float wrap, HorizontalAlign halign, VerticalAlign valign, float* vertices, float* offsety, uint32_t* vertexCount); +void lovrFontRender(Font* font, const char* str, size_t length, float wrap, HorizontalAlign halign, VerticalAlign valign, float* vertices, float* offsety, uint32_t* vertexCount); float lovrFontGetWidth(Font* font, const char* string, float wrap); float lovrFontGetHeight(Font* font); float lovrFontGetAscent(Font* font); diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index be8df1b6..bbd73ed9 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -879,14 +879,14 @@ void lovrGraphicsSkybox(Texture* texture, float angle, float ax, float ay, float }); } -void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign) { +void lovrGraphicsPrint(const char* str, size_t length, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign) { Font* font = lovrGraphicsGetFont(); float scale = 1 / font->pixelDensity; float offsety; uint32_t vertexCount; - uint32_t maxVertices = strlen(str) * 6; + uint32_t maxVertices = length * 6; float* vertices = lovrGraphicsGetVertexPointer(maxVertices); - lovrFontRender(font, str, wrap, halign, valign, vertices, &offsety, &vertexCount); + lovrFontRender(font, str, length, wrap, halign, valign, vertices, &offsety, &vertexCount); Pipeline pipeline = state.pipeline; pipeline.alphaSampling = true; diff --git a/src/graphics/graphics.h b/src/graphics/graphics.h index 83edd5d3..9e7de846 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -233,7 +233,7 @@ void lovrGraphicsCircle(DrawStyle style, Material* material, mat4 transform, int void lovrGraphicsCylinder(Material* material, float x1, float y1, float z1, float x2, float y2, float z2, float r1, float r2, bool capped, int segments); void lovrGraphicsSphere(Material* material, mat4 transform, int segments); void lovrGraphicsSkybox(Texture* texture, float angle, float ax, float ay, float az); -void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign); +void lovrGraphicsPrint(const char* str, size_t length, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign); void lovrGraphicsFill(Texture* texture, float u, float v, float w, float h); #define lovrGraphicsStencil lovrGpuStencil #define lovrGraphicsCompute lovrGpuCompute