Browse Source

text-freetype2: Support linear SRGB

jpark37 4 years ago
parent
commit
015ed39923
2 changed files with 15 additions and 1 deletions
  1. 11 1
      plugins/text-freetype2/obs-convenience.c
  2. 4 0
      plugins/text-freetype2/text-freetype2.c

+ 11 - 1
plugins/text-freetype2/obs-convenience.c

@@ -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);
 }

+ 4 - 0
plugins/text-freetype2/text-freetype2.c

@@ -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);
 }