X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=lighting.h;h=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391;hb=d13f2700b1773551307685cc7c34c804ccd6d664;hp=8f9bdb3115e2bc05d0c05f1bf6459b1851773157;hpb=ecc4dfbfb3adf91d2dfc03ba0ec9a821fcc2390c;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/lighting.h b/lighting.h index 8f9bdb3..e69de29 100644 --- a/lighting.h +++ b/lighting.h @@ -1,104 +0,0 @@ -#ifndef LIGHTING_H -#define LIGHTING_H - -#include "common.h" -#include "scene.h" - -static int ray_world( v3f pos, v3f dir, ray_hit *hit ); - -typedef struct voxel_gi voxel_gi; - -struct voxel_gi -{ - GLuint hw_texture, - pt_texture; - - v3i pt_dims; /* Page table dimentions */ - i32 page_size; - - v3f origin; -}; - -static void voxel_gi_setup( voxel_gi *gi, scene *sc, - i32 page_size, float voxel_res ) -{ - v3_copy( sc->bbx[0], gi->origin ); - gi->page_size = page_size; - - v3f extent; - v3_sub( sc->bbx[1], sc->bbx[0], extent ); - - float fpage_size = voxel_res * (float)page_size; - - for( int i=0; i<3; i++ ) - { - i32 voxel_count = extent[i] / voxel_res; - gi->pt_dims[i] = (voxel_count+page_size-1) / page_size; - } - - i32 pt_capacity = gi->pt_dims[0]*gi->pt_dims[1]*gi->pt_dims[2]; - vg_info( "Page table size: %dkb\n", (pt_capacity*2*2)/1024 ); - - u16 *page_table = malloc( pt_capacity*sizeof(u16)*3 ); - - - u32 active_count = 0; - - for( int z=0; zpt_dims[2]; z++ ) - { - for( int y=0; ypt_dims[1]; y++ ) - { - for( int x=0; xpt_dims[0]; x++ ) - { - v3f base = {x,y,z}, - end = {x+1,y+1,z+1}; - - boxf page_region; - - v3_muladds( sc->bbx[0], base, ((float)page_size)*voxel_res, base ); - v3_muladds( sc->bbx[0], end, ((float)page_size)*voxel_res, end ); - v3_copy( base, page_region[0] ); - v3_copy( end, page_region[1] ); - - u32 nothing[2]; - if( bh_select( &sc->bhtris, page_region, nothing, 2 )) - { - active_count ++; - - /* Calculate lighting */ - } - } - } - } - - /* Calculate physical storage size */ - vg_info( "Hardware texture required size: %dmb\n", - ((active_count*page_size*page_size*page_size*1)/1024)/1024 ); - vg_info( "Required physical blocks: %d\n", active_count ); - - free( page_table ); -} - -static void compute_lighting_vertex( scene *sc ) -{ - v3f light_dir = { 0.2f, 1.0f, 1.0f }; - v3_normalize( light_dir ); - - for( int i=0; ivertex_count; i++ ) - { - model_vert *mv = &sc->verts[i]; - - ray_hit hit; - hit.dist = 100.0f; - - ray_world( mv->co, light_dir, &hit ); - float amt = hit.dist / 100.0f; - - mv->colour[0] = amt; - mv->colour[1] = amt; - mv->colour[2] = amt; - mv->colour[3] = 1.0f; - } -} - -#endif /* LIGHTING_H */