#include "text.h" #include "freetype/freetype.h" #include "text_shader.h" #include "utils.h" static void font_context_sampler_desc(struct sg_sampler_desc* desc) { wayc_notnull(desc); desc->min_filter = SG_FILTER_LINEAR; desc->mag_filter = SG_FILTER_LINEAR; desc->wrap_u = SG_WRAP_CLAMP_TO_EDGE; desc->wrap_v = SG_WRAP_CLAMP_TO_EDGE; } static void font_context_pipeline_desc(struct sg_pipeline_desc* desc) { wayc_notnull(desc); const struct sg_shader_desc* shader_desc = text_shader_desc(sg_query_backend()); sg_shader shader = sg_make_shader(shader_desc); desc->shader = shader; } enum font_context_error_e font_context_init(struct font_context_s* context) { wayc_notnull(context); FT_Library ft; FT_Error fterr = FT_Init_FreeType(&ft); if (fterr) return FONT_CONTEXT_ERROR_LOAD_LIBRARY; struct sg_sampler_desc sampler_desc = {}; font_context_sampler_desc(&sampler_desc); struct sg_pipeline_desc pipeline_desc = {}; font_context_pipeline_desc(&pipeline_desc); context->ft = ft; context->sampler = sg_make_sampler(&sampler_desc); context->pipeline = sg_make_pipeline(&pipeline_desc); return FONT_CONTEXT_ERROR_NONE; } void font_context_deinit(struct font_context_s* context);