1 // Copyright (C) 2021 Harry Godden (hgn)
3 // Basic buffers-only version of csRadar
4 //=======================================================================================================================
9 void frag_gbuffer( void *dest
, vmf_vert tri
[3], float bca
, float bcb
, float bcc
);
10 void frag_gbuffer_clear( void *dest
);
12 csr_shader shader_gbuffer
=
14 .stride
= sizeof(float)*8, // (origin) x,y, (actual height) z
16 .clear
= frag_gbuffer_clear
19 // Main drawing function
20 void draw_buffers( csr_api
*api
, int bounds_only
);
22 // Extension implementation
23 // =========================================================================================================
26 void csr_ext_main( csr_api
*api
)
28 if( !csr_init( api
) )
31 // Setup shader variants
32 if( api
->write_origins
)
34 // Use origin fragment variant
37 if( api
->write_normals
)
42 csr_create_target( &api
->target
, api
->resolution
, api
->resolution
, api
->sampling_mode
, &shader_gbuffer
);
43 csr_rt_clear( &api
->target
);
45 // Compute bounds, collect models
46 draw_buffers( api
, 1 );
47 csr_auto_fit( &api
->target
, api
->padding
);
48 vmf_load_models( api
->map
);
51 draw_buffers( api
, 0 );
54 void csr_ext_exit( csr_api
*api
)
56 csr_rt_free( &api
->target
);
59 void draw_buffers( csr_api
*api
, int bounds_only
)
61 csr_filter filter
= { .compute_bounds_only
= bounds_only
};
62 vmf_map
*map
= api
->map
;
64 if( api
->num_strings
== 1 )
67 csr_vmf_render( &api
->target
, map
, map
->root
, &filter
, NULL
, NULL
);
71 csr_rt_save_buffers( &api
->target
, api
->output_path
, "all" );
77 for( int i
= 1; i
< api
->num_strings
; i
++ )
79 filter
.visgroup
= api
->strings
[ i
];
80 csr_vmf_render( &api
->target
, map
, map
->root
, &filter
, NULL
, NULL
);
84 csr_rt_save_buffers( &api
->target
, api
->output_path
, api
->strings
[i
] );
85 //csr_rt_save_c32f( ... );
86 //csr_rt_save_tga( ... );
88 // tar_write_dds( ... );
90 csr_rt_clear( &api
->target
);
96 void frag_gbuffer( void *dest
, vmf_vert tri
[3], float bca
, float bcb
, float bcc
)
98 float *dest_colour
= (float *)dest
;
100 v3_muls( tri
[0].co
, bca
, dest_colour
);
101 v3_muladds( dest_colour
, tri
[1].co
, bcb
, dest_colour
);
102 v3_muladds( dest_colour
, tri
[2].co
, bcc
, dest_colour
);
107 void frag_gbuffer_clear( void *dest
)
109 float *dest_colour
= (float *)dest
;
110 v3_zero( dest_colour
);