X-Git-Url: https://harrygodden.com/git/?p=csRadar.git;a=blobdiff_plain;f=ext_csr_free.c;fp=ext_csr_free.c;h=ffec370b0a02cb76c21e4e0b4e7a1a47ec68e544;hp=f6b0b85c1044886899aceff646f6686e2e25a607;hb=dee56773cecd3a165331732008b7c0acf6f13393;hpb=abfc6360542cb480122313a36f6ed02c08074ed5 diff --git a/ext_csr_free.c b/ext_csr_free.c index f6b0b85..ffec370 100644 --- a/ext_csr_free.c +++ b/ext_csr_free.c @@ -5,6 +5,9 @@ #include "csRadar.h" +float min_height = 0.f; +v4f remapping_range; + // GBuffer shader void frag_gbuffer( void *dest, vmf_vert tri[3], float bca, float bcb, float bcc ); void frag_gbuffer_clear( void *dest ); @@ -27,17 +30,6 @@ void csr_ext_main( csr_api *api ) { if( !csr_init( api ) ) return; - - // Setup shader variants - if( api->write_origins ) - { - // Use origin fragment variant - } - - if( api->write_normals ) - { - // Increase stride - } csr_create_target( &api->target, api->resolution, api->resolution, api->sampling_mode, &shader_gbuffer ); csr_rt_clear( &api->target ); @@ -47,6 +39,10 @@ void csr_ext_main( csr_api *api ) csr_auto_fit( &api->target, api->padding ); vmf_load_models( api->map ); + min_height = api->target.bounds[0][2]; + v2_copy( api->target.bounds[0], remapping_range ); + v2_sub( api->target.bounds[1], api->target.bounds[0], &remapping_range[2] ); + // Draw everything draw_buffers( api, 0 ); } @@ -69,6 +65,7 @@ void draw_buffers( csr_api *api, int bounds_only ) if( !bounds_only ) { csr_rt_save_buffers( &api->target, api->output_path, "all" ); + csr_rt_save_tga( &api->target, "test_test_test.tga", 3*sizeof(float), 4 ); } } else @@ -76,16 +73,18 @@ void draw_buffers( csr_api *api, int bounds_only ) // Draw groups for( int i = 1; i < api->num_strings; i ++ ) { - filter.visgroup = api->strings[ i ]; + csr_filter_update_from_strings( &filter, &api->strings[i] ); + csr_vmf_render( &api->target, map, map->root, &filter, NULL, NULL ); if( !bounds_only ) { - csr_rt_save_buffers( &api->target, api->output_path, api->strings[i] ); + csr_rt_save_buffers( &api->target, api->output_path, api->strings[i].str ); //csr_rt_save_c32f( ... ); //csr_rt_save_tga( ... ); // tar_write_dds( ... ); + csr_rt_save_tga( &api->target, "test_test_test.tga", 3*sizeof(float), 4 ); csr_rt_clear( &api->target ); } @@ -97,15 +96,34 @@ void frag_gbuffer( void *dest, vmf_vert tri[3], float bca, float bcb, float bcc { float *dest_colour = (float *)dest; - v3_muls( tri[0].co, bca, dest_colour ); - v3_muladds( dest_colour, tri[1].co, bcb, dest_colour ); - v3_muladds( dest_colour, tri[2].co, bcc, dest_colour ); + // Position + v2_sub( tri[0].origin, remapping_range, dest_colour ); + v2_div( dest_colour, &remapping_range[2], dest_colour ); + + dest_colour[2] = tri[0].co[2]*bca + tri[1].co[2]*bcb + tri[2].co[2]*bcc; + + // Normals + v3_muls( tri[0].nrm, bca, dest_colour+3 ); + v3_muladds( dest_colour+3, tri[1].nrm, bcb, dest_colour+3 ); + v3_muladds( dest_colour+3, tri[2].nrm, bcc, dest_colour+3 ); - // TODO: Normal map + v3_muls( dest_colour+3, 0.5f, dest_colour+3 ); + v3_add( (v3f){0.5f,0.5f,0.5f}, dest_colour+3, dest_colour+3 ); + + // Mask + dest_colour[6] = 1.f; } void frag_gbuffer_clear( void *dest ) { float *dest_colour = (float *)dest; - v3_zero( dest_colour ); + dest_colour[0] = 0.f; + dest_colour[1] = 0.f; + dest_colour[2] = min_height; + + dest_colour[3] = 0.5f; + dest_colour[4] = 0.5f; + dest_colour[5] = 1.0f; + + dest_colour[6] = 0.f; }