Avoid redundant strlen in font printing;

This commit is contained in:
bjorn 2018-12-25 00:28:56 -08:00 committed by Bjorn Swenson
parent fae7786c8d
commit d66057ee70
5 changed files with 11 additions and 11 deletions

View File

@ -852,13 +852,14 @@ static int l_lovrGraphicsSkybox(lua_State* L) {
} }
static int l_lovrGraphicsPrint(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]; float transform[16];
int index = luax_readmat4(L, 2, transform, 1, NULL); int index = luax_readmat4(L, 2, transform, 1, NULL);
float wrap = luaL_optnumber(L, index++, 0); float wrap = luaL_optnumber(L, index++, 0);
HorizontalAlign halign = luaL_checkoption(L, index++, "center", HorizontalAligns); HorizontalAlign halign = luaL_checkoption(L, index++, "center", HorizontalAligns);
VerticalAlign valign = luaL_checkoption(L, index++, "middle", VerticalAligns); VerticalAlign valign = luaL_checkoption(L, index++, "middle", VerticalAligns);
lovrGraphicsPrint(str, transform, wrap, halign, valign); lovrGraphicsPrint(str, length, transform, wrap, halign, valign);
return 0; return 0;
} }

View File

@ -68,7 +68,7 @@ Rasterizer* lovrFontGetRasterizer(Font* font) {
return font->rasterizer; 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; FontAtlas* atlas = &font->atlas;
float cx = 0; float cx = 0;
@ -77,9 +77,8 @@ void lovrFontRender(Font* font, const char* str, float wrap, HorizontalAlign hal
float v = atlas->height; float v = atlas->height;
float scale = 1 / font->pixelDensity; float scale = 1 / font->pixelDensity;
int len = strlen(str);
const char* start = str; const char* start = str;
const char* end = str + len; const char* end = str + length;
unsigned int previous = '\0'; unsigned int previous = '\0';
unsigned int codepoint; unsigned int codepoint;
size_t bytes; size_t bytes;
@ -119,7 +118,7 @@ void lovrFontRender(Font* font, const char* str, float wrap, HorizontalAlign hal
// Start over if texture was repacked // Start over if texture was repacked
if (u != atlas->width || v != atlas->height) { 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; return;
} }

View File

@ -42,7 +42,7 @@ Font* lovrFontInit(Font* font, Rasterizer* rasterizer);
#define lovrFontCreate(...) lovrFontInit(lovrAlloc(Font), __VA_ARGS__) #define lovrFontCreate(...) lovrFontInit(lovrAlloc(Font), __VA_ARGS__)
void lovrFontDestroy(void* ref); void lovrFontDestroy(void* ref);
Rasterizer* lovrFontGetRasterizer(Font* font); 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 lovrFontGetWidth(Font* font, const char* string, float wrap);
float lovrFontGetHeight(Font* font); float lovrFontGetHeight(Font* font);
float lovrFontGetAscent(Font* font); float lovrFontGetAscent(Font* font);

View File

@ -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(); Font* font = lovrGraphicsGetFont();
float scale = 1 / font->pixelDensity; float scale = 1 / font->pixelDensity;
float offsety; float offsety;
uint32_t vertexCount; uint32_t vertexCount;
uint32_t maxVertices = strlen(str) * 6; uint32_t maxVertices = length * 6;
float* vertices = lovrGraphicsGetVertexPointer(maxVertices); 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 pipeline = state.pipeline;
pipeline.alphaSampling = true; pipeline.alphaSampling = true;

View File

@ -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 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 lovrGraphicsSphere(Material* material, mat4 transform, int segments);
void lovrGraphicsSkybox(Texture* texture, float angle, float ax, float ay, float az); 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); void lovrGraphicsFill(Texture* texture, float u, float v, float w, float h);
#define lovrGraphicsStencil lovrGpuStencil #define lovrGraphicsStencil lovrGpuStencil
#define lovrGraphicsCompute lovrGpuCompute #define lovrGraphicsCompute lovrGpuCompute