better lighting
This commit is contained in:
parent
805a2713a3
commit
6ed4e17065
75 changed files with 6417 additions and 3667 deletions
|
|
@ -27,6 +27,7 @@ typedef struct pxl8_sprite_cache_entry {
|
|||
struct pxl8_gfx {
|
||||
pxl8_atlas* atlas;
|
||||
pxl8_gfx_backend backend;
|
||||
const pxl8_bsp* bsp;
|
||||
pxl8_colormap* colormap;
|
||||
u8* framebuffer;
|
||||
i32 framebuffer_height;
|
||||
|
|
@ -38,6 +39,7 @@ struct pxl8_gfx {
|
|||
pxl8_palette_cube* palette_cube;
|
||||
pxl8_pixel_mode pixel_mode;
|
||||
void* platform_data;
|
||||
const pxl8_sdf* sdf;
|
||||
pxl8_sprite_cache_entry* sprite_cache;
|
||||
u32 sprite_cache_capacity;
|
||||
u32 sprite_cache_count;
|
||||
|
|
@ -61,6 +63,9 @@ pxl8_pixel_mode pxl8_gfx_get_pixel_mode(pxl8_gfx* gfx) {
|
|||
|
||||
u8* pxl8_gfx_get_framebuffer_indexed(pxl8_gfx* gfx) {
|
||||
if (!gfx || gfx->pixel_mode == PXL8_PIXEL_HICOLOR) return NULL;
|
||||
if (gfx->backend.type == PXL8_GFX_BACKEND_CPU) {
|
||||
return pxl8_cpu_get_framebuffer(gfx->backend.cpu);
|
||||
}
|
||||
return gfx->framebuffer;
|
||||
}
|
||||
|
||||
|
|
@ -73,6 +78,27 @@ i32 pxl8_gfx_get_height(const pxl8_gfx* gfx) {
|
|||
return gfx ? gfx->framebuffer_height : 0;
|
||||
}
|
||||
|
||||
u32* pxl8_gfx_get_light_accum(pxl8_gfx* gfx) {
|
||||
if (!gfx) return NULL;
|
||||
if (gfx->backend.type == PXL8_GFX_BACKEND_CPU) {
|
||||
return pxl8_cpu_get_light_accum(gfx->backend.cpu);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const u32* pxl8_gfx_palette_colors(pxl8_gfx* gfx) {
|
||||
if (!gfx || !gfx->palette) return NULL;
|
||||
return pxl8_palette_colors(gfx->palette);
|
||||
}
|
||||
|
||||
u16* pxl8_gfx_get_zbuffer(pxl8_gfx* gfx) {
|
||||
if (!gfx) return NULL;
|
||||
if (gfx->backend.type == PXL8_GFX_BACKEND_CPU) {
|
||||
return pxl8_cpu_get_zbuffer(gfx->backend.cpu);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
i32 pxl8_gfx_get_width(const pxl8_gfx* gfx) {
|
||||
return gfx ? gfx->framebuffer_width : 0;
|
||||
}
|
||||
|
|
@ -608,12 +634,24 @@ pxl8_3d_frame pxl8_3d_frame_from_camera(const pxl8_3d_camera* camera, const pxl8
|
|||
return frame;
|
||||
}
|
||||
|
||||
void pxl8_3d_set_bsp(pxl8_gfx* gfx, const pxl8_bsp* bsp) {
|
||||
if (!gfx) return;
|
||||
gfx->bsp = bsp;
|
||||
}
|
||||
|
||||
void pxl8_3d_set_sdf(pxl8_gfx* gfx, const pxl8_sdf* sdf) {
|
||||
if (!gfx) return;
|
||||
gfx->sdf = sdf;
|
||||
}
|
||||
|
||||
void pxl8_3d_begin_frame(pxl8_gfx* gfx, const pxl8_3d_camera* camera, const pxl8_lights* lights, const pxl8_3d_uniforms* uniforms) {
|
||||
if (!gfx || !camera) return;
|
||||
|
||||
pxl8_3d_frame frame = pxl8_3d_frame_from_camera(camera, uniforms);
|
||||
frame.bsp = gfx->bsp;
|
||||
frame.lights = lights ? pxl8_lights_data(lights) : NULL;
|
||||
frame.lights_count = lights ? pxl8_lights_count(lights) : 0;
|
||||
frame.sdf = gfx->sdf;
|
||||
|
||||
pxl8_mat4 vp = pxl8_mat4_multiply(frame.projection, frame.view);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue