blob: d881b20acb263cd03831a61dbedb10cbf25cfe7b [file] [log] [blame]
/* SPDX-License-Identifier: LGPL-2.1 */
/*
* Copyright (C) 2018 VMware Inc, Yordan Karadzhov <y.karadz@gmail.com>
*/
/**
* @file libkshark-plot.h
* @brief Basic tools for OpenGL plotting.
*/
#ifndef _LIB_KSHARK_PLOT_H
#define _LIB_KSHARK_PLOT_H
// C
#include <stdbool.h>
// OpenGL
#include <GL/gl.h>
#include <GL/glu.h>
/*
* STB TrueType (single-file public domain library)
* https://github.com/nothings/stb
*/
#include "stb_truetype.h"
#ifdef __cplusplus
extern "C" {
#endif
// KernelShark
#include "KsCmakeDef.hpp"
/** Structure defining a RGB color. */
struct ksplot_color {
/** The Red component of the color. */
uint8_t red;
/** The Green component of the color. */
uint8_t green;
/** The Blue component of the color. */
uint8_t blue;
};
/** Structure defining a 2D point. */
struct ksplot_point {
/** The horizontal coordinate of the point in pixels. */
int x;
/** The vertical coordinate of the pointin in pixels. */
int y;
};
#ifdef GLUT_FOUND
void ksplot_make_scene(int width, int height);
#endif // GLUT_FOUND
void ksplot_init_opengl(int dpr);
void ksplot_resize_opengl(int width, int height);
void ksplot_draw_point(const struct ksplot_point *p,
const struct ksplot_color *col,
float size);
void ksplot_draw_line(const struct ksplot_point *a,
const struct ksplot_point *b,
const struct ksplot_color *col,
float size);
void ksplot_draw_polyline(const struct ksplot_point *points,
size_t n_points,
const struct ksplot_color *col,
float size);
void ksplot_draw_polygon(const struct ksplot_point *points,
size_t n_points,
const struct ksplot_color *col,
float size);
void ksplot_draw_polygon_contour(const struct ksplot_point *points,
size_t n_points,
const struct ksplot_color *col,
float size);
/** The index of the "Space" character. */
#define KS_SPACE_CHAR 32
/** The index of the "Tilda" character. */
#define KS_TILDA_CHAR 126
/** Total number of characters supported for drawing. */
#define KS_N_CHAR (KS_TILDA_CHAR - KS_SPACE_CHAR + 1)
/** Structure defining a font. */
struct ksplot_font {
/** Identifier of the font's texture. */
GLuint texture_id;
/** Font's texture baking data. */
stbtt_bakedchar cdata[KS_N_CHAR];
/** The height of a text line. */
int height;
/** The vertical position of the font's baseline. */
int base;
/** The size of the font. */
int size;
/**
* The width of the 'z' character. To be use as an average character
* width.
*/
int char_width;
};
/** Check if the texture of the font is loaded. */
static inline bool ksplot_font_is_loaded(struct ksplot_font *f)
{
return f->texture_id > 1;
}
char *ksplot_find_font_file(const char *font_family, const char *font_name);
bool ksplot_init_font(struct ksplot_font *font, float size, const char *file);
void ksplot_print_text(const struct ksplot_font *font,
const struct ksplot_color *col,
float x, float y,
const char *text);
#ifdef __cplusplus
}
#endif
#endif