pxl8/src/gfx/pxl8_gfx3d.h

65 lines
1.9 KiB
C
Raw Normal View History

#pragma once
#include "pxl8_3d_camera.h"
2026-01-21 23:19:50 -06:00
#include "pxl8_lights.h"
#include "pxl8_math.h"
#include "pxl8_mesh.h"
#include "pxl8_types.h"
2026-01-31 09:31:17 -06:00
typedef struct pxl8_bsp pxl8_bsp;
typedef struct pxl8_gfx pxl8_gfx;
typedef struct pxl8_3d_uniforms {
u8 ambient;
pxl8_vec3 celestial_dir;
f32 celestial_intensity;
u8 fog_color;
f32 fog_density;
f32 time;
} pxl8_3d_uniforms;
2026-01-31 09:31:17 -06:00
typedef struct pxl8_3d_frame_desc {
const pxl8_bsp* bsp;
const pxl8_3d_camera* camera;
const pxl8_lights* lights;
const pxl8_sdf* sdf;
pxl8_3d_uniforms uniforms;
} pxl8_3d_frame_desc;
typedef struct pxl8_3d_frame {
2026-01-31 09:31:17 -06:00
const pxl8_bsp* bsp;
pxl8_vec3 camera_dir;
pxl8_vec3 camera_pos;
f32 far_clip;
2026-01-21 23:19:50 -06:00
const pxl8_light* lights;
u32 lights_count;
f32 near_clip;
pxl8_mat4 projection;
2026-01-31 09:31:17 -06:00
const pxl8_sdf* sdf;
2026-01-21 23:19:50 -06:00
pxl8_3d_uniforms uniforms;
pxl8_mat4 view;
} pxl8_3d_frame;
#ifdef __cplusplus
extern "C" {
#endif
2026-01-31 09:31:17 -06:00
void pxl8_3d_set_bsp(pxl8_gfx* gfx, const pxl8_bsp* bsp);
void pxl8_3d_set_sdf(pxl8_gfx* gfx, const pxl8_sdf* sdf);
2026-01-21 23:19:50 -06:00
void pxl8_3d_begin_frame(pxl8_gfx* gfx, const pxl8_3d_camera* camera, const pxl8_lights* lights, const pxl8_3d_uniforms* uniforms);
void pxl8_3d_clear(pxl8_gfx* gfx, u8 color);
void pxl8_3d_clear_depth(pxl8_gfx* gfx);
void pxl8_3d_draw_line(pxl8_gfx* gfx, pxl8_vec3 v0, pxl8_vec3 v1, u8 color);
2026-01-21 23:19:50 -06:00
void pxl8_3d_draw_mesh(pxl8_gfx* gfx, const pxl8_mesh* mesh, const pxl8_mat4* model, const pxl8_gfx_material* material);
void pxl8_3d_end_frame(pxl8_gfx* gfx);
u8* pxl8_3d_get_framebuffer(pxl8_gfx* gfx);
const pxl8_frustum* pxl8_3d_get_frustum(pxl8_gfx* gfx);
2026-01-21 23:19:50 -06:00
const pxl8_mat4* pxl8_3d_get_view_proj(pxl8_gfx* gfx);
u32 pxl8_3d_project_points(pxl8_gfx* gfx, const pxl8_vec3* in, pxl8_vec3* out, u32 count, const pxl8_mat4* transform);
pxl8_3d_frame pxl8_3d_frame_from_camera(const pxl8_3d_camera* camera, const pxl8_3d_uniforms* uniforms);
#ifdef __cplusplus
}
#endif