Files
armorpaint/base/sources/iron_draw.h
T

66 lines
2.8 KiB
C
Raw Normal View History

2025-02-26 08:47:09 +01:00
// This implementation was adapted from tizilogic's krink and robdangerous' kha, licensed under zlib/libpng license
// https://github.com/tizilogic/krink/blob/main/Sources/krink/graphics2/graphics.h
// https://github.com/Kode/Kha/tree/main/Sources/kha/graphics2
#pragma once
#include <stdbool.h>
#include <stdint.h>
2025-03-10 20:26:45 +01:00
#include "iron_math.h"
#include "iron_gpu.h"
2025-02-26 08:47:09 +01:00
#include "iron_array.h"
2025-03-10 20:26:45 +01:00
#include "iron_mat3.h"
2025-02-26 08:47:09 +01:00
typedef struct draw_font_image draw_font_image_t;
typedef struct draw_font {
unsigned char *blob;
draw_font_image_t *images;
size_t m_capacity;
size_t m_images_len;
int offset;
2025-03-02 21:07:17 +01:00
buffer_t *buf;
2025-03-10 20:26:45 +01:00
int glyphs_version;
2025-02-26 08:47:09 +01:00
int index;
2025-03-02 21:07:17 +01:00
} draw_font_t;
2025-02-26 08:47:09 +01:00
2025-07-12 20:20:34 +02:00
void draw_init(buffer_t *image_vert, buffer_t *image_frag, buffer_t *image_transform_vert, buffer_t *image_transform_frag, buffer_t *rect_vert, buffer_t *rect_frag, buffer_t *tris_vert, buffer_t *tris_frag, buffer_t *text_vert, buffer_t *text_frag);
2025-06-19 19:55:16 +02:00
void draw_begin(gpu_texture_t *target, bool clear, unsigned color);
void draw_scaled_sub_image(gpu_texture_t *img, float sx, float sy, float sw, float sh, float dx, float dy, float dw, float dh);
void draw_scaled_image(gpu_texture_t *tex, float dx, float dy, float dw, float dh);
void draw_sub_image(gpu_texture_t *tex, float sx, float sy, float sw, float sh, float x, float y);
void draw_image(gpu_texture_t *tex, float x, float y);
2025-02-26 08:47:09 +01:00
void draw_filled_triangle(float x0, float y0, float x1, float y1, float x2, float y2);
void draw_filled_rect(float x, float y, float width, float height);
void draw_rect(float x, float y, float width, float height, float strength);
void draw_line(float x0, float y0, float x1, float y1, float strength);
void draw_line_aa(float x0, float y0, float x1, float y1, float strength);
void draw_string(const char *text, float x, float y);
void draw_end(void);
void draw_set_color(uint32_t color);
uint32_t draw_get_color();
2025-06-19 19:55:16 +02:00
void draw_set_pipeline(gpu_pipeline_t *pipeline);
2025-03-10 20:26:45 +01:00
void draw_set_transform(mat3_t matrix);
2025-02-26 08:47:09 +01:00
bool draw_set_font(draw_font_t *font, int size);
2025-03-10 20:26:45 +01:00
void draw_font_init(draw_font_t *font);
void draw_font_destroy(draw_font_t *font);
void draw_font_13(draw_font_t *font);
2025-02-26 08:47:09 +01:00
bool draw_font_has_glyph(int glyph);
void draw_font_add_glyph(int glyph);
2025-03-10 20:26:45 +01:00
void draw_font_init_glyphs(int from, int to);
2025-02-26 08:47:09 +01:00
int draw_font_count(draw_font_t *font);
int draw_font_height(draw_font_t *font, int font_size);
float draw_sub_string_width(draw_font_t *font, int font_size, const char *text, int start, int end);
int draw_string_width(draw_font_t *font, int font_size, const char *text);
void draw_set_bilinear_filter(bool bilinear);
void draw_filled_circle(float cx, float cy, float radius, int segments);
void draw_circle(float cx, float cy, float radius, int segments, float strength);
void draw_cubic_bezier(f32_array_t *x, f32_array_t *y, int segments, float strength);
2025-03-03 20:22:58 +01:00
extern int draw_font_size;
extern draw_font_t *draw_font;
2025-06-19 19:55:16 +02:00
extern gpu_texture_t *_draw_current;