text-freetype2: Support linear SRGB

master
jpark37 2021-01-20 08:20:12 -08:00
parent a6fc46156d
commit 015ed39923
2 changed files with 15 additions and 1 deletions

View File

@ -67,6 +67,11 @@ void draw_uv_vbuffer(gs_vertbuffer_t *vbuf, gs_texture_t *tex,
if (vbuf == NULL || tex == NULL)
return;
const bool linear_srgb = gs_get_linear_srgb();
const bool previous = gs_framebuffer_srgb_enabled();
gs_enable_framebuffer_srgb(linear_srgb);
gs_vertexbuffer_flush(vbuf);
gs_load_vertexbuffer(vbuf);
gs_load_indexbuffer(NULL);
@ -75,7 +80,10 @@ void draw_uv_vbuffer(gs_vertbuffer_t *vbuf, gs_texture_t *tex,
for (size_t i = 0; i < passes; i++) {
if (gs_technique_begin_pass(tech, i)) {
gs_effect_set_texture(image, texture);
if (linear_srgb)
gs_effect_set_texture_srgb(image, texture);
else
gs_effect_set_texture(image, texture);
gs_draw(GS_TRIS, 0, num_verts);
@ -84,4 +92,6 @@ void draw_uv_vbuffer(gs_vertbuffer_t *vbuf, gs_texture_t *tex,
}
gs_technique_end(tech);
gs_enable_framebuffer_srgb(previous);
}

View File

@ -247,6 +247,8 @@ static void ft2_source_render(void *data, gs_effect_t *effect)
if (srcdata->text == NULL || *srcdata->text == 0)
return;
const bool previous = gs_set_linear_srgb(true);
gs_reset_blend_state();
if (srcdata->outline_text)
draw_outlines(srcdata);
@ -256,6 +258,8 @@ static void ft2_source_render(void *data, gs_effect_t *effect)
draw_uv_vbuffer(srcdata->vbuf, srcdata->tex, srcdata->draw_effect,
(uint32_t)wcslen(srcdata->text) * 6);
gs_set_linear_srgb(previous);
UNUSED_PARAMETER(effect);
}