fixed m4x3 mul, rendering works
[csRadar.git] / csRadar.c
index ae383f77e756ac7f5c32c998d7dfcbeab5d6e00f..9c8c0b4d0f08e8922896ef1911554a2ba8c6e78a 100644 (file)
--- a/csRadar.c
+++ b/csRadar.c
@@ -3,6 +3,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
+#include <time.h>
 
 // CSR lib
 #include "csrTypes.h"
 // Valve formats
 #include "vdf.h"
 #include "vpk.h"
+#include "vfilesys.h"
+
 #include "vmdl.h"
 #include "vmf.h"
 
-#include "vfilesys.h"
 
 // CSR main
 #include "csrDraw.h"
 
 int main( int argc, char *argv[] )
 {
-       vmf_vert *triangles = NULL;
-       vmf_vert oh_yeah_yeah = {0};
-
-       for( int i = 0; i < 22; i ++ )
-       {
-               triangles = csr_sb_reserve( triangles, 3, sizeof( vmf_vert ) );
-               
-               vmf_vert *tri = triangles + csr_sb_count( triangles );
-               
-               tri[0] = oh_yeah_yeah;
-               tri[1] = oh_yeah_yeah;
-               tri[2] = oh_yeah_yeah;
-
-               csr_sb_inc( triangles, 3 );
-       }
-
        if( argc == 2 )
        {
+               fs_set_gameinfo( "/home/harry/SteamLibrary/steamapps/common/Counter-Strike Global Offensive/csgo/gameinfo.txt" );
                
                printf( "read: %s\n", argv[1] );
-               vdf_node *node = vdf_open_file( argv[1] );
+               //vdf_node *node = vdf_open_file( argv[1] );
+               
+               vmf_map *map = vmf_init( argv[1], 1 );
+               
+               // TODO: Make init/free codes
+               csr_target target = 
+               {
+                       .x = 1024, .y = 1024,
+                       .fragments = (csr_frag *)csr_malloc( 1024*1024*sizeof(csr_frag) ),
+                       .bounds = { -1000.f, -1000.f, 1000.f, 1000.f }
+               };
+               csr_rt_clear( &target );
+               
+               draw_vmf_group( &target, map, map->root, 0, NULL, NULL );
+               
+               float *rgba_test = (float *)csr_malloc( 1024*1024*sizeof(float)*3 );
+               
+               for( int l = 0; l < 1024; l ++ )
+               {
+                       for( int x = 0; x < 1024; x ++ )
+                       {
+                               float *dst = &rgba_test[ (l*1024+x)*3 ];
+                               csr_frag *src = &target.fragments[ ((1023-l)*1024+x) ];
+                               
+                               dst[0] = src->co[0];
+                               dst[1] = src->co[1];
+                               dst[2] = src->co[2];
+                       }
+               }
                
+               csr_32f_write( "hello.pfm", 1024, 1024, rgba_test );
+               
+               free( target.fragments );
+               free( rgba_test );
+               vmf_free( map );
+               fs_exit();
                
+               /*
                vmf_solid solid_main;
                
                
@@ -62,26 +84,31 @@ int main( int argc, char *argv[] )
                {
                        solidgen_push( &solid_main, brush );
                }
-               
-               vmf_vert *triangles = NULL;
+
+               clock_t t;
+               t = clock();
+               printf("Timer starts\n");
+
+               csr_frag *image = (csr_frag *)csr_malloc( 1024*1024*sizeof(csr_frag) );
+               clear_depth( image, 1024, 1024 );
 
                for( int i = 0; i < csr_sb_count( solid_main.indices )/3; i ++ )
                {
                        u32 * base = solid_main.indices + i*3;
                        
-                       triangles = csr_sb_reserve( triangles, 3, sizeof( vmf_vert ) );
-                       
-                       vmf_vert *tri = triangles + csr_sb_count( triangles );
+                       vmf_vert tri[3];
                        
                        tri[0] = solid_main.verts[ base[0] ];
                        tri[1] = solid_main.verts[ base[1] ];
                        tri[2] = solid_main.verts[ base[2] ];
-
-                       csr_sb_inc( triangles, 3 );
+                       
+                       draw_buffers( image, 1024, 1024, (v4f){ -1000.f, -1000.f, 1000.f, 1000.f }, tri, 1 );
                }
                
-               csr_frag *image = (csr_frag *)csr_malloc( 1024*1024*sizeof(csr_frag) );
-               draw_buffers( image, 1024, 1024, (v4f){ -1000.f, -1000.f, 1000.f, 1000.f }, triangles, csr_sb_count( triangles )/3 );
+               printf("Timer ends \n");
+               t = clock() - t;
+               double time_taken = ((double)t)/CLOCKS_PER_SEC; // calculate the elapsed time
+               printf("Tracing took %f seconds to execute\n", time_taken);
                
                float *rgba_test = (float *)csr_malloc( 1024*1024*sizeof(float)*3 );
                
@@ -96,10 +123,10 @@ int main( int argc, char *argv[] )
                
                free( rgba_test );
                free( image );
-               csr_sb_free( triangles );
                
                solidgen_to_obj( &solid_main, "hello.obj" );
                
                vdf_free_r( node );
+               */
        }
 }