mirror of https://github.com/bjornbytes/lovr.git
Font:getFilter; Font:setFilter;
This commit is contained in:
parent
766b44f77a
commit
a4faad39f8
|
@ -1247,8 +1247,7 @@ static int l_lovrGraphicsNewFont(lua_State* L) {
|
|||
padding = luaL_optinteger(L, 2, padding);
|
||||
spread = luaL_optnumber(L, 3, spread);
|
||||
}
|
||||
TextureFilter defaultFilter = lovrGraphicsGetDefaultFilter();
|
||||
Font* font = lovrFontCreate(rasterizer, padding, spread, defaultFilter.mode);
|
||||
Font* font = lovrFontCreate(rasterizer, padding, spread);
|
||||
luax_pushtype(L, Font, font);
|
||||
lovrRelease(rasterizer, lovrRasterizerDestroy);
|
||||
lovrRelease(font, lovrFontDestroy);
|
||||
|
|
|
@ -109,6 +109,23 @@ static int l_lovrFontHasGlyphs(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int l_lovrFontGetFilter(lua_State* L) {
|
||||
Font* font = luax_checktype(L, 1, Font);
|
||||
TextureFilter filter = lovrFontGetFilter(font);
|
||||
luax_pushenum(L, FilterMode, filter.mode);
|
||||
lua_pushnumber(L, filter.anisotropy);
|
||||
return 2;
|
||||
}
|
||||
|
||||
static int l_lovrFontSetFilter(lua_State* L) {
|
||||
Font* font = luax_checktype(L, 1, Font);
|
||||
FilterMode mode = luax_checkenum(L, 2, FilterMode, NULL);
|
||||
float anisotropy = luax_optfloat(L, 3, 1.f);
|
||||
TextureFilter filter = { .mode = mode, .anisotropy = anisotropy };
|
||||
lovrFontSetFilter(font, filter);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg lovrFont[] = {
|
||||
{ "getWidth", l_lovrFontGetWidth },
|
||||
{ "getHeight", l_lovrFontGetHeight },
|
||||
|
@ -123,5 +140,7 @@ const luaL_Reg lovrFont[] = {
|
|||
{ "setPixelDensity", l_lovrFontSetPixelDensity },
|
||||
{ "getRasterizer", l_lovrFontGetRasterizer},
|
||||
{ "hasGlyphs", l_lovrFontHasGlyphs },
|
||||
{ "getFilter", l_lovrFontGetFilter },
|
||||
{ "setFilter", l_lovrFontSetFilter },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "graphics/font.h"
|
||||
#include "graphics/graphics.h"
|
||||
#include "graphics/texture.h"
|
||||
#include "data/rasterizer.h"
|
||||
#include "data/image.h"
|
||||
|
@ -27,7 +28,7 @@ struct Font {
|
|||
uint32_t padding;
|
||||
float lineHeight;
|
||||
float pixelDensity;
|
||||
FilterMode filterMode;
|
||||
TextureFilter filter;
|
||||
bool flip;
|
||||
};
|
||||
|
||||
|
@ -50,7 +51,7 @@ static void lovrFontAddGlyph(Font* font, Glyph* glyph);
|
|||
static void lovrFontExpandTexture(Font* font);
|
||||
static void lovrFontCreateTexture(Font* font);
|
||||
|
||||
Font* lovrFontCreate(Rasterizer* rasterizer, uint32_t padding, double spread, FilterMode filterMode) {
|
||||
Font* lovrFontCreate(Rasterizer* rasterizer, uint32_t padding, double spread) {
|
||||
Font* font = calloc(1, sizeof(Font));
|
||||
lovrAssert(font, "Out of memory");
|
||||
font->ref = 1;
|
||||
|
@ -61,7 +62,7 @@ Font* lovrFontCreate(Rasterizer* rasterizer, uint32_t padding, double spread, Fi
|
|||
font->spread = spread;
|
||||
font->lineHeight = 1.f;
|
||||
font->pixelDensity = (float) lovrRasterizerGetHeight(rasterizer);
|
||||
font->filterMode = filterMode;
|
||||
font->filter = lovrGraphicsGetDefaultFilter();
|
||||
map_init(&font->kerning, 0);
|
||||
|
||||
// Atlas
|
||||
|
@ -108,6 +109,17 @@ Texture* lovrFontGetTexture(Font* font) {
|
|||
return font->texture;
|
||||
}
|
||||
|
||||
TextureFilter lovrFontGetFilter(Font* font) {
|
||||
return font->filter;
|
||||
}
|
||||
|
||||
void lovrFontSetFilter(Font* font, TextureFilter filter) {
|
||||
if (font->filter.mode != filter.mode || font->filter.anisotropy != filter.anisotropy) {
|
||||
font->filter = filter;
|
||||
lovrTextureSetFilter(font->texture, filter);
|
||||
}
|
||||
}
|
||||
|
||||
void lovrFontRender(Font* font, const char* str, size_t length, float wrap, HorizontalAlign halign, float* vertices, uint16_t* indices, uint16_t baseVertex) {
|
||||
FontAtlas* atlas = &font->atlas;
|
||||
bool flip = font->flip;
|
||||
|
@ -357,7 +369,7 @@ static void lovrFontCreateTexture(Font* font) {
|
|||
lovrRelease(font->texture, lovrTextureDestroy);
|
||||
Image* image = lovrImageCreate(font->atlas.width, font->atlas.height, NULL, 0x0, FORMAT_RGBA16F);
|
||||
font->texture = lovrTextureCreate(TEXTURE_2D, &image, 1, false, false, 0);
|
||||
lovrTextureSetFilter(font->texture, (TextureFilter) { .mode = font->filterMode });
|
||||
lovrTextureSetFilter(font->texture, font->filter);
|
||||
lovrTextureSetWrap(font->texture, (TextureWrap) { .s = WRAP_CLAMP, .t = WRAP_CLAMP });
|
||||
lovrRelease(image, lovrImageDestroy);
|
||||
}
|
||||
|
|
|
@ -21,10 +21,12 @@ typedef enum {
|
|||
} VerticalAlign;
|
||||
|
||||
typedef struct Font Font;
|
||||
Font* lovrFontCreate(struct Rasterizer* rasterizer, uint32_t padding, double spread, FilterMode filterMode);
|
||||
Font* lovrFontCreate(struct Rasterizer* rasterizer, uint32_t padding, double spread);
|
||||
void lovrFontDestroy(void* ref);
|
||||
struct Rasterizer* lovrFontGetRasterizer(Font* font);
|
||||
struct Texture* lovrFontGetTexture(Font* font);
|
||||
TextureFilter lovrFontGetFilter(Font* font);
|
||||
void lovrFontSetFilter(Font* font, TextureFilter filter);
|
||||
void lovrFontRender(Font* font, const char* str, size_t length, float wrap, HorizontalAlign halign, float* vertices, uint16_t* indices, uint16_t baseVertex);
|
||||
void lovrFontMeasure(Font* font, const char* string, size_t length, float wrap, float* width, float* lastLineWidth, float* height, uint32_t* lineCount, uint32_t* glyphCount);
|
||||
uint32_t lovrFontGetPadding(Font* font);
|
||||
|
|
|
@ -483,7 +483,7 @@ Font* lovrGraphicsGetFont() {
|
|||
if (!state.font) {
|
||||
if (!state.defaultFont) {
|
||||
Rasterizer* rasterizer = lovrRasterizerCreate(NULL, 32);
|
||||
state.defaultFont = lovrFontCreate(rasterizer, 1, 3., state.defaultFilter.mode);
|
||||
state.defaultFont = lovrFontCreate(rasterizer, 1, 3.);
|
||||
lovrRelease(rasterizer, lovrRasterizerDestroy);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue