tga & normals
[csRadar.git] / ext_csr_free.c
index f6b0b85c1044886899aceff646f6686e2e25a607..ffec370b0a02cb76c21e4e0b4e7a1a47ec68e544 100644 (file)
@@ -5,6 +5,9 @@
 
 #include "csRadar.h"
 
 
 #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 );
 // 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;
 {
        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 );
        
        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 );
        
        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 ); 
 }
        // 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" );
                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
                }
        }
        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 ++ )
                {
                // 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_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_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 );
                        }
                                
                                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;
 
 {
        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;
 }
 
 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;
 }
 }