$darkmode
Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
billboard_rendering.c File Reference
#include "billboard_rendering.h"
#include "gl_common.h"
#include "instanced_rendering.h"
#include "render_utils.h"
#include <assert.h>
#include <stddef.h>
Include dependency graph for billboard_rendering.c:

Functions

void billboard_group_init (BillboardGroup *group, const SphereInstance *data, int count)
 Initializes the billboard group and allocates GPU memory. More...
 
void billboard_group_update (BillboardGroup *group, const SphereInstance *data, int count)
 Updates instance data on the GPU. More...
 
void billboard_group_update_from_buffer (BillboardGroup *group, GLuint src_buffer, int count)
 Updates instance data on the GPU by copying from another GPU buffer (e.g. SSBO). More...
 
static void setup_billboard_instance_attributes (void)
 
static void create_billboard_vao (GLuint *vao, GLuint geometry_vbo, GLuint instance_vbo)
 
void billboard_group_prepare (BillboardGroup *group, GLuint quad_vbo, GLuint wire_quad_vbo, GLuint wire_cube_vbo)
 Prepares the VAO by linking a shared quad VBO with internal instance data. More...
 
void billboard_group_draw (BillboardGroup *group)
 Executes the instanced draw call for all billboards in the group. More...
 
void billboard_group_cleanup (BillboardGroup *group)
 Releases all GPU resources allocated for the billboard group. More...
 
void billboard_group_draw_debug_fill (BillboardGroup *group)
 Draws filled quads for each instance (for debug transparency). More...
 
void billboard_group_draw_debug_quads (BillboardGroup *group)
 Draws wireframe quads for each instance. More...
 
void billboard_group_draw_debug_boxes (BillboardGroup *group)
 Draws wireframe boxes for each instance. More...
 

Variables

static const int WIRE_CUBE_VERTEX_COUNT = 24
 

Function Documentation

◆ billboard_group_cleanup()

void billboard_group_cleanup ( BillboardGroup group)

Releases all GPU resources allocated for the billboard group.

Parameters
groupPointer to the group.

◆ billboard_group_draw()

void billboard_group_draw ( BillboardGroup group)

Executes the instanced draw call for all billboards in the group.

Parameters
groupPointer to the group.

◆ billboard_group_draw_debug_boxes()

void billboard_group_draw_debug_boxes ( BillboardGroup group)

Draws wireframe boxes for each instance.

Assumes the correct shader is already bound.

Parameters
groupPointer to the group.

◆ billboard_group_draw_debug_fill()

void billboard_group_draw_debug_fill ( BillboardGroup group)

Draws filled quads for each instance (for debug transparency).

Assumes the correct shader is already bound.

Parameters
groupPointer to the group.

◆ billboard_group_draw_debug_quads()

void billboard_group_draw_debug_quads ( BillboardGroup group)

Draws wireframe quads for each instance.

Assumes the correct shader is already bound.

Parameters
groupPointer to the group.

◆ billboard_group_init()

void billboard_group_init ( BillboardGroup group,
const SphereInstance data,
int  count 
)

Initializes the billboard group and allocates GPU memory.

RESOURCE MANAGEMENT:

  • This function creates OpenGL resources (VBO).
  • MUST be paired with billboard_group_cleanup() to avoid memory leaks.
  • Do NOT call init twice on the same group without cleanup in between.
Parameters
groupPointer to the group (must be zero-initialized).
dataInitial instance data (can be NULL if only allocating).
countNumber of instances to allocate for.

◆ billboard_group_prepare()

void billboard_group_prepare ( BillboardGroup group,
GLuint  quad_vbo,
GLuint  wire_quad_vbo,
GLuint  wire_cube_vbo 
)

Prepares the VAO by linking a shared quad VBO with internal instance data.

Parameters
groupPointer to the group.
quad_vboVBO containing basic quad geometry (usually from render_utils).
wire_quad_vboVBO for debug wireframe quad.
wire_cube_vboVBO for debug wireframe unit box.
Here is the call graph for this function:

◆ billboard_group_update()

void billboard_group_update ( BillboardGroup group,
const SphereInstance data,
int  count 
)

Updates instance data on the GPU.

Typically used for per-frame updates like sorting or movement.

Parameters
groupPointer to the group.
dataNew instance data.
countNumber of instances to update.

◆ billboard_group_update_from_buffer()

void billboard_group_update_from_buffer ( BillboardGroup group,
GLuint  src_buffer,
int  count 
)

Updates instance data on the GPU by copying from another GPU buffer (e.g. SSBO).

Use this when the sorted data is already on the GPU to avoid CPU roundtrips.

Parameters
groupPointer to the group.
src_bufferHandle of the source buffer.
countNumber of instances to update.

◆ create_billboard_vao()

static void create_billboard_vao ( GLuint *  vao,
GLuint  geometry_vbo,
GLuint  instance_vbo 
)
static
Here is the call graph for this function:

◆ setup_billboard_instance_attributes()

static void setup_billboard_instance_attributes ( void  )
static
Here is the call graph for this function:

Variable Documentation

◆ WIRE_CUBE_VERTEX_COUNT

const int WIRE_CUBE_VERTEX_COUNT = 24
static