libacfutils
A general purpose library of utility functions designed to make it easier to develop addons for the X-Plane flight simulator.
Loading...
Searching...
No Matches
mt_cairo_render.h
Go to the documentation of this file.
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license in the file COPYING
10 * or http://www.opensource.org/licenses/CDDL-1.0.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file COPYING.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 2023 Saso Kiselkov. All rights reserved.
24 */
34#ifndef _ACF_UTILS_MT_CAIRO_RENDER_H_
35#define _ACF_UTILS_MT_CAIRO_RENDER_H_
36
37#include <cairo.h>
38#include <cairo-ft.h>
39#include <ft2build.h>
40#include FT_FREETYPE_H
41
42#include "geom.h"
43#include "log.h"
44#include "font_utils.h" /* for backwards compat with apps */
45#include "cairo_utils.h" /* for backwards compat with apps */
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51API_EXPORT void mt_cairo_render_glob_init(bool_t want_coherent_mem);
52
70typedef bool_t (*mt_cairo_init_cb_t)(cairo_t *cr, void *userinfo);
81typedef void (*mt_cairo_fini_cb_t)(cairo_t *cr, void *userinfo);
95typedef void (*mt_cairo_render_cb_t)(cairo_t *cr, unsigned w, unsigned h,
96 void *userinfo);
97typedef struct mt_cairo_render_s mt_cairo_render_t;
98typedef struct mt_cairo_uploader_s mt_cairo_uploader_t;
99
128#define mt_cairo_render_init(w, h, fps, init_cb, render_cb, fini_cb, userinfo) \
129 mt_cairo_render_init_impl(log_basename(__FILE__), __LINE__, \
130 (w), (h), (fps), (init_cb), (render_cb), (fini_cb), (userinfo))
131API_EXPORT mt_cairo_render_t *mt_cairo_render_init_impl(const char *filename,
132 int line, unsigned w, unsigned h, double fps, mt_cairo_init_cb_t init_cb,
133 mt_cairo_render_cb_t render_cb, mt_cairo_fini_cb_t fini_cb, void *userinfo);
134
135API_EXPORT void mt_cairo_render_fini(mt_cairo_render_t *mtcr);
136API_EXPORT void mt_cairo_render_set_fps(mt_cairo_render_t *mtcr, double fps);
137API_EXPORT double mt_cairo_render_get_fps(mt_cairo_render_t *mtcr);
138API_EXPORT void mt_cairo_render_enable_fg_mode(mt_cairo_render_t *mtcr);
139API_EXPORT bool_t mt_cairo_render_get_fg_mode(const mt_cairo_render_t *mtcr);
140API_EXPORT void mt_cairo_render_set_texture_filter(mt_cairo_render_t *mtcr,
141 unsigned gl_filter_enum);
142API_EXPORT void mt_cairo_render_set_shader(mt_cairo_render_t *mtcr,
143 unsigned prog);
144unsigned mt_cairo_render_get_shader(mt_cairo_render_t *mtcr);
145API_EXPORT void mt_cairo_render_set_monochrome(mt_cairo_render_t *mtcr,
146 vect3_t color);
148 const mt_cairo_render_t *mtcr);
149API_EXPORT void mt_cairo_render_once(mt_cairo_render_t *mtcr);
150API_EXPORT void mt_cairo_render_once_wait(mt_cairo_render_t *mtcr);
151
152API_EXPORT void mt_cairo_render_draw(mt_cairo_render_t *mtcr, vect2_t pos,
153 vect2_t size);
154API_EXPORT void mt_cairo_render_draw_subrect(mt_cairo_render_t *mtcr,
155 vect2_t src_pos, vect2_t src_sz, vect2_t pos, vect2_t size);
156API_EXPORT void mt_cairo_render_draw_pvm(mt_cairo_render_t *mtcr, vect2_t pos,
157 vect2_t size, const float *pvm);
158API_EXPORT void mt_cairo_render_draw_subrect_pvm(mt_cairo_render_t *mtcr,
159 vect2_t src_pos, vect2_t src_sz, vect2_t pos, vect2_t size,
160 const float *pvm);
161API_EXPORT void mt_cairo_render_set_uploader(mt_cairo_render_t *mtcr,
162 mt_cairo_uploader_t *mtul);
163API_EXPORT mt_cairo_uploader_t *mt_cairo_render_get_uploader(
164 mt_cairo_render_t *mtcr);
165
166API_EXPORT unsigned mt_cairo_render_get_tex(mt_cairo_render_t *mtcr);
167API_EXPORT unsigned mt_cairo_render_get_width(mt_cairo_render_t *mtcr);
168API_EXPORT unsigned mt_cairo_render_get_height(mt_cairo_render_t *mtcr);
169typedef struct {
170 unsigned x, y;
171 unsigned w, h;
173API_EXPORT void mt_cairo_render_blit_back2front(mt_cairo_render_t *mtcr,
174 const mtcr_rect_t *rects, size_t num);
175
176#ifdef LACF_MTCR_DEBUG
177API_EXPORT void mt_cairo_render_set_ctx_checking_enabled(
178 mt_cairo_render_t *mtcr, bool_t flag);
179#endif /* defined(LACF_MTCR_DEBUG) */
180
181/*
182 * Must ONLY be called from the rendering callback.
183 */
184API_EXPORT void mt_cairo_render_rounded_rectangle(cairo_t *cr, double x,
185 double y, double w, double h, double radius);
186
187API_EXPORT mt_cairo_uploader_t *mt_cairo_uploader_init(void);
188API_EXPORT void mt_cairo_uploader_fini(mt_cairo_uploader_t *mtul);
189
190#ifdef __cplusplus
191}
192#endif
193
194#endif /* _ACF_UTILS_MT_CAIRO_RENDER_H_ */
#define mt_cairo_render_rounded_rectangle
Definition cairo_utils.h:54
bool_t(* mt_cairo_init_cb_t)(cairo_t *cr, void *userinfo)
void mt_cairo_render_once_wait(mt_cairo_render_t *mtcr)
vect3_t mt_cairo_render_get_monochrome(const mt_cairo_render_t *mtcr)
unsigned mt_cairo_render_get_shader(mt_cairo_render_t *mtcr)
void mt_cairo_render_set_texture_filter(mt_cairo_render_t *mtcr, unsigned gl_filter_enum)
void mt_cairo_render_draw_subrect(mt_cairo_render_t *mtcr, vect2_t src_pos, vect2_t src_sz, vect2_t pos, vect2_t size)
unsigned mt_cairo_render_get_tex(mt_cairo_render_t *mtcr)
void mt_cairo_render_fini(mt_cairo_render_t *mtcr)
unsigned mt_cairo_render_get_width(mt_cairo_render_t *mtcr)
void mt_cairo_render_glob_init(bool_t want_coherent_mem)
void mt_cairo_render_draw_pvm(mt_cairo_render_t *mtcr, vect2_t pos, vect2_t size, const float *pvm)
void mt_cairo_render_set_shader(mt_cairo_render_t *mtcr, unsigned prog)
mt_cairo_render_t * mt_cairo_render_init_impl(const char *filename, int line, unsigned w, unsigned h, double fps, mt_cairo_init_cb_t init_cb, mt_cairo_render_cb_t render_cb, mt_cairo_fini_cb_t fini_cb, void *userinfo)
double mt_cairo_render_get_fps(mt_cairo_render_t *mtcr)
void(* mt_cairo_fini_cb_t)(cairo_t *cr, void *userinfo)
mt_cairo_uploader_t * mt_cairo_render_get_uploader(mt_cairo_render_t *mtcr)
mt_cairo_uploader_t * mt_cairo_uploader_init(void)
void mt_cairo_render_draw(mt_cairo_render_t *mtcr, vect2_t pos, vect2_t size)
void mt_cairo_uploader_fini(mt_cairo_uploader_t *mtul)
void mt_cairo_render_set_uploader(mt_cairo_render_t *mtcr, mt_cairo_uploader_t *mtul)
unsigned mt_cairo_render_get_height(mt_cairo_render_t *mtcr)
void(* mt_cairo_render_cb_t)(cairo_t *cr, unsigned w, unsigned h, void *userinfo)
void mt_cairo_render_set_monochrome(mt_cairo_render_t *mtcr, vect3_t color)
bool_t mt_cairo_render_get_fg_mode(const mt_cairo_render_t *mtcr)
void mt_cairo_render_enable_fg_mode(mt_cairo_render_t *mtcr)
void mt_cairo_render_set_fps(mt_cairo_render_t *mtcr, double fps)
void mt_cairo_render_draw_subrect_pvm(mt_cairo_render_t *mtcr, vect2_t src_pos, vect2_t src_sz, vect2_t pos, vect2_t size, const float *pvm)
void mt_cairo_render_once(mt_cairo_render_t *mtcr)
Definition geom.h:89