$darkmode
Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
render_utils.h
Go to the documentation of this file.
1 #ifndef RENDER_UTILS_H
2 #define RENDER_UTILS_H
3 
4 #include "gl_common.h"
5 #include <stddef.h>
6 
21 // -----------------------------------------------------------------------------
22 // Texture Management
23 // -----------------------------------------------------------------------------
24 
39 GLuint render_utils_create_color_texture(float red, float green, float blue,
40  float alpha);
41 
54 void render_utils_bind_texture_safe(GLenum unit, GLuint texture,
55  GLuint fallback_tex);
56 
73 void render_utils_reset_texture_units(int start_unit, int end_unit,
74  GLuint fallback_tex);
75 
76 // -----------------------------------------------------------------------------
77 // Geometry Helpers
78 // -----------------------------------------------------------------------------
79 
89 void render_utils_create_empty_vao(GLuint* vao);
90 
102 void render_utils_create_quad_vbo(GLuint* vbo);
103 
111 void render_utils_create_wire_cube_vbo(GLuint* vbo);
112 
121 void render_utils_create_wire_quad_vbo(GLuint* vbo);
122 
136 void render_utils_create_fullscreen_quad(GLuint* vao, GLuint* vbo);
137 
138 // -----------------------------------------------------------------------------
139 // Debugging / Validation
140 // -----------------------------------------------------------------------------
141 
145 typedef struct {
146  const char*
148  const char* renderer;
150  const char* version;
151 } GPUInfo;
152 
159 
172 void render_utils_generate_gpu_identifier(const char* vendor,
173  const char* renderer, char* buffer,
174  size_t size);
175 
184 void render_utils_get_gpu_identifier(char* buffer, size_t size);
185 
194 int render_utils_check_framebuffer(const char* label);
195 
209 GLuint render_utils_create_texture_2d(int width, int height,
210  GLenum internal_format, GLint levels,
211  const char* label);
212 
225  size_t offset_albedo,
226  size_t offset_metallic);
227 
228 // -----------------------------------------------------------------------------
229 // State Management
230 // -----------------------------------------------------------------------------
231 
236 typedef struct {
237  GLboolean depth_enabled;
238  GLboolean blend_enabled;
239  GLint polygon_mode[2];
240 } GLStateBackup;
241 
246 
251 void render_utils_restore_state(const GLStateBackup* state);
252 
256 void render_utils_setup_ui_state(void);
257 
258 #endif // RENDER_UTILS_H
Common OpenGL definitions, RAII helpers, and utilities.
void render_utils_get_gpu_identifier(char *buffer, size_t size)
Generates a filesystem-safe identifier for the current GPU.
Definition: render_utils.c:244
void render_utils_reset_texture_units(int start_unit, int end_unit, GLuint fallback_tex)
Resets a range of texture units to a safe state.
Definition: render_utils.c:50
GPUInfo render_utils_get_gpu_info(void)
Retrieves currently active GPU hardware and driver information.
Definition: render_utils.c:180
void render_utils_bind_texture_safe(GLenum unit, GLuint texture, GLuint fallback_tex)
Safely binds a texture to a specific unit, using a fallback if needed.
Definition: render_utils.c:39
void render_utils_setup_sphere_instance_attributes(GLsizei stride, size_t offset_albedo, size_t offset_metallic)
Sets up instance attributes for sphere rendering (Model, Albedo, PBR).
Definition: render_utils.c:275
void render_utils_create_wire_cube_vbo(GLuint *vbo)
Creates a wireframe Unit Cube VBO (GL_LINES).
Definition: render_utils.c:88
void render_utils_create_quad_vbo(GLuint *vbo)
Creates a standard centered Quad VBO.
Definition: render_utils.c:73
void render_utils_create_fullscreen_quad(GLuint *vao, GLuint *vbo)
Creates a Full-Screen Quad VAO and VBO.
Definition: render_utils.c:128
void render_utils_generate_gpu_identifier(const char *vendor, const char *renderer, char *buffer, size_t size)
Sanitizes GPU vendor and renderer strings into a filesystem-safe identifier.
Definition: render_utils.c:213
GLuint render_utils_create_texture_2d(int width, int height, GLenum internal_format, GLint levels, const char *label)
Creates a 2D texture with specified parameters.
Definition: render_utils.c:251
void render_utils_create_empty_vao(GLuint *vao)
Creates an empty Vertex Array Object (VAO).
Definition: render_utils.c:65
void render_utils_create_wire_quad_vbo(GLuint *vbo)
Creates a wireframe Quad VBO (GL_LINE_LOOP).
Definition: render_utils.c:114
void render_utils_restore_state(const GLStateBackup *state)
Restores OpenGL state from a backup struct.
Definition: render_utils.c:320
GLStateBackup render_utils_save_state(void)
Saves current OpenGL state to a backup struct.
Definition: render_utils.c:311
GLuint render_utils_create_color_texture(float red, float green, float blue, float alpha)
Creates a 1x1 floating-point texture of a specific color.
Definition: render_utils.c:15
int render_utils_check_framebuffer(const char *label)
Checks the completeness of the currently bound framebuffer.
Definition: render_utils.c:170
void render_utils_setup_ui_state(void)
Configures standard 2D/UI rendering state (Alpha blend, No depth).
Definition: render_utils.c:337
Struct to backup common OpenGL state bits to restore after 2D/UI passes.
Definition: render_utils.h:236
GLboolean depth_enabled
Definition: render_utils.h:237
GLboolean blend_enabled
Definition: render_utils.h:238
Struct to hold GPU hardware and driver information.
Definition: render_utils.h:145
const char * vendor
Definition: render_utils.h:147
const char * version
Definition: render_utils.h:150
const char * renderer
Definition: render_utils.h:148