$darkmode
Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
ui.h
Go to the documentation of this file.
1 
9 #ifndef UI_H
10 #define UI_H
11 
13 #define ASCII_CHAR_COUNT 96
14 
15 #include "gl_common.h"
16 #include <cglm/cglm.h>
17 
18 typedef struct Shader Shader;
19 
24 typedef struct {
25  float x0, y0, x1, y1;
26  float w, h;
27  float x_off, y_off;
28  float advance;
29 } GlyphInfo;
30 
32 #define UI_MAX_BATCH_VERTICES 8192
33 
38 typedef struct {
39  float x, y;
40  float u, v;
41  float r, g, b, a;
42  float mode; // 0=solid, 1=text, 2=rounded
43  float rect_size_x, rect_size_y;
44  float radius;
45 } UIVertex;
46 
51 typedef struct {
52  GLuint texture;
54  Shader*
56  GLuint vao, vbo;
58  float font_size;
59  UIVertex batch_vertices[UI_MAX_BATCH_VERTICES];
64  GLuint current_texture;
65 } UIContext;
66 
71 typedef struct {
73  float start_x;
74  float cursor_y;
75  float padding;
78 } UILayout;
79 
87 int ui_init(UIContext* ui_context, const char* font_path, float font_size);
88 
93 void ui_destroy(UIContext* ui_context);
94 
95 /* --- Batch API --- */
96 
103 void ui_begin(UIContext* ui_context, int screen_width, int screen_height);
104 
109 void ui_flush(UIContext* ui_context);
110 
115 void ui_end(UIContext* ui_context);
116 
117 /* --- Layout API --- */
118 
122 void ui_layout_init(UILayout* layout, UIContext* ui_ctx, float pos_x,
123  float pos_y, float padding, int screen_width,
124  int screen_height);
125 
127 void ui_layout_text(UILayout* layout, const char* text, const vec3 color);
128 
130 void ui_layout_separator(UILayout* layout, float space);
131 
132 /* --- Low-level API --- */
133 
135 void ui_draw_text(UIContext* ui_context, const char* text, float pos_x,
136  float pos_y, const vec3 color, int screen_width,
137  int screen_height);
138 
145 float ui_measure_text(const UIContext* ui_context, const char* text);
146 
148 void ui_draw_text_ex(UIContext* ui_context, const char* text, float pos_x,
149  float pos_y, const vec3 color, float alpha,
150  int screen_width, int screen_height);
151 
153 void ui_draw_text_scaled(UIContext* ui_context, const char* text, float pos_x,
154  float pos_y, const vec3 color, float alpha,
155  float scale, int screen_width, int screen_height);
156 
158 void ui_draw_rect(UIContext* ui_context, float rect_x, float rect_y,
159  float width, float height, const vec3 color, int screen_width,
160  int screen_height);
161 
163 void ui_draw_rect_ex(UIContext* ui_context, float rect_x, float rect_y,
164  float width, float height, const vec3 color, float alpha,
165  int screen_width, int screen_height);
166 
168 void ui_draw_spinner(UIContext* ui_context, float center_x, float center_y,
169  float size, float angle, const vec3 color,
170  int screen_width, int screen_height);
171 
173 void ui_draw_rounded_rect(UIContext* ui_context, float rect_x, float rect_y,
174  float width, float height, float radius,
175  const vec3 color, float alpha, int screen_width,
176  int screen_height);
177 
179 void ui_draw_glow_rect(UIContext* ui_context, float rect_x, float rect_y,
180  float width, float height, float radius,
181  const vec3 color, float alpha, int screen_width,
182  int screen_height);
183 
195 void ui_draw_textured_quad(UIContext* ui_context, GLuint texture, float rect_x,
196  float rect_y, float width, float height,
197  const vec3 tint, float alpha, int screen_width,
198  int screen_height);
199 
213 void ui_draw_bloom_quad(UIContext* ui_context, GLuint texture, float rect_x,
214  float rect_y, float width, float height,
215  const vec3 tint, float intensity, int screen_width,
216  int screen_height);
217 
218 #endif /* UI_H */
layout(location=0) in vec3 RayDir
Common OpenGL definitions, RAII helpers, and utilities.
Metrics and texture coordinates for a single font character.
Definition: ui.h:24
float h
Definition: ui.h:26
float advance
Definition: ui.h:28
float x_off
Definition: ui.h:27
float x0
Definition: ui.h:25
Wrapper for an OpenGL program with uniform caching and automatic cleanup.
Definition: shader.h:71
Persistent state for the UI system.
Definition: ui.h:51
GLuint vao
Definition: ui.h:56
int batch_active
Definition: ui.h:63
GLuint current_texture
Definition: ui.h:64
Shader * spinner_shader
Definition: ui.h:55
int current_screen_width
Definition: ui.h:61
Shader * shader
Definition: ui.h:53
GLuint texture
Definition: ui.h:52
int current_screen_height
Definition: ui.h:62
float font_size
Definition: ui.h:58
int batch_count
Definition: ui.h:60
Helper for automatic vertical stacking of UI elements.
Definition: ui.h:71
float cursor_y
Definition: ui.h:74
int screen_height
Definition: ui.h:77
float start_x
Definition: ui.h:73
float padding
Definition: ui.h:75
int screen_width
Definition: ui.h:76
UIContext * ui
Definition: ui.h:72
Vertex data for the batch renderer.
Definition: ui.h:38
float rect_size_x
Definition: ui.h:43
float mode
Definition: ui.h:42
float u
Definition: ui.h:40
float a
Definition: ui.h:41
float radius
Definition: ui.h:44
float x
Definition: ui.h:39
void ui_layout_init(UILayout *layout, UIContext *ui_ctx, float pos_x, float pos_y, float padding, int screen_width, int screen_height)
Initializes a layout helper for a frame.
Definition: ui.c:553
void ui_draw_rect_ex(UIContext *ui_context, float rect_x, float rect_y, float width, float height, const vec3 color, float alpha, int screen_width, int screen_height)
Draws a solid color rectangle with custom alpha transparency.
Definition: ui.c:471
float ui_measure_text(const UIContext *ui_context, const char *text)
Measures the width of a text string in pixels.
Definition: ui.c:379
void ui_begin(UIContext *ui_context, int screen_width, int screen_height)
Begins a new UI batch.
Definition: ui.c:303
void ui_draw_glow_rect(UIContext *ui_context, float rect_x, float rect_y, float width, float height, float radius, const vec3 color, float alpha, int screen_width, int screen_height)
Draws an SDF neon glow border around a rounded rectangle area.
Definition: ui.c:827
void ui_destroy(UIContext *ui_context)
Releases UI resources.
Definition: ui.c:523
void ui_draw_text_ex(UIContext *ui_context, const char *text, float pos_x, float pos_y, const vec3 color, float alpha, int screen_width, int screen_height)
Draws text with custom alpha transparency.
Definition: ui.c:402
void ui_layout_text(UILayout *layout, const char *text, const vec3 color)
Draws text and advances the layout cursor.
Definition: ui.c:565
void ui_layout_separator(UILayout *layout, float space)
Adds vertical space to the layout.
Definition: ui.c:579
#define UI_MAX_BATCH_VERTICES
Maximum number of vertices per UI batch.
Definition: ui.h:32
#define ASCII_CHAR_COUNT
Number of supported glyphs in the font atlas.
Definition: ui.h:13
void ui_draw_text(UIContext *ui_context, const char *text, float pos_x, float pos_y, const vec3 color, int screen_width, int screen_height)
Draws a single text string at a specific coordinate.
Definition: ui.c:371
void ui_flush(UIContext *ui_context)
Flushes the current UI batch to the GPU.
Definition: ui.c:326
void ui_draw_bloom_quad(UIContext *ui_context, GLuint texture, float rect_x, float rect_y, float width, float height, const vec3 tint, float intensity, int screen_width, int screen_height)
Draws a textured quad with additive blending for bloom effects (mode 4).
Definition: ui.c:770
void ui_draw_textured_quad(UIContext *ui_context, GLuint texture, float rect_x, float rect_y, float width, float height, const vec3 tint, float alpha, int screen_width, int screen_height)
Draws a textured quad tinted by a color (mode 3).
Definition: ui.c:718
void ui_draw_text_scaled(UIContext *ui_context, const char *text, float pos_x, float pos_y, const vec3 color, float alpha, float scale, int screen_width, int screen_height)
Draws text with custom alpha transparency and a scale factor.
Definition: ui.c:410
int ui_init(UIContext *ui_context, const char *font_path, float font_size)
Initializes the UI system.
Definition: ui.c:236
void ui_draw_rect(UIContext *ui_context, float rect_x, float rect_y, float width, float height, const vec3 color, int screen_width, int screen_height)
Draws a solid color rectangle.
Definition: ui.c:463
void ui_draw_spinner(UIContext *ui_context, float center_x, float center_y, float size, float angle, const vec3 color, int screen_width, int screen_height)
Draws a rotating loading spinner.
Definition: ui.c:587
void ui_draw_rounded_rect(UIContext *ui_context, float rect_x, float rect_y, float width, float height, float radius, const vec3 color, float alpha, int screen_width, int screen_height)
Draws a rounded rectangle with custom alpha.
Definition: ui.c:660
void ui_end(UIContext *ui_context)
Ends the current UI batch and restores OpenGL state.
Definition: ui.c:360