+// ALWAYS RGB32
+void csr_rt_save_c32f( csr_target *rt, const char *path, u32 offset )
+{
+ float *image = (float *)csr_malloc( rt->x*rt->y*3*sizeof(float) );
+
+ float contrib = 255.f/(float)rt->num_samples;
+
+ for( int i = 0; i < rt->x*rt->y; i ++ )
+ {
+ void *src = rt->colour + offset + i * rt->num_samples * rt->shader->stride;
+ float *dst = image + i*3;
+
+ v3_zero( dst );
+ for( int k = 0; k < rt->num_samples; k ++ )
+ {
+ v3_muladds( dst, (float *)(src + k*rt->shader->stride), contrib, dst );
+ }
+ }
+
+ csr_32f_write( path, rt->x, rt->y, image );
+ free( image );
+}
+