X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=csrDraw.h;h=f2b007fdd92bd13b0f1b65defa3602916e92fe54;hb=3e1642e28847218d89d1bec2f8b035c10359ac91;hp=29189a1e9cfd16cc21e10dc6d5367cdcc9627845;hpb=1d2752b69b6285d5eb6436728c6cf84228a9ccde;p=csRadar.git diff --git a/csrDraw.h b/csrDraw.h index 29189a1..f2b007f 100644 --- a/csrDraw.h +++ b/csrDraw.h @@ -2,6 +2,25 @@ typedef struct csr_frag csr_frag; typedef struct csr_target csr_target; typedef struct csr_filter csr_filter; +// MSAA patterns +v2f csr_msaa_1[] = +{ + {0.f, 0.f} +}; + +v2f csr_msaa_2x2[] = +{ + { 0.25f, 0.25f }, + { 0.25f, -0.25f }, + { -0.25f, -0.25f }, + { -0.25f, 0.25f } +}; + +v2f csr_msaa_2x2rgss[] = +{ + +}; + struct csr_frag { v3f co; @@ -81,18 +100,17 @@ void csr_auto_fit( csr_target *rt, float padding ) dx = rt->bounds[1][0] - rt->bounds[0][0]; dy = rt->bounds[1][1] - rt->bounds[0][1]; - l = fmaxf( dx, dy ); - d = l * ( l / dx ) * .5f; + l = fmaxf( dx, dy ) * .5f; cx = (rt->bounds[1][0] + rt->bounds[0][0]) * .5f; cy = (rt->bounds[1][1] + rt->bounds[0][1]) * .5f; - rt->bounds[0][0] = cx - d - padding; - rt->bounds[1][0] = cx + d + padding; - rt->bounds[0][1] = cy - d - padding; - rt->bounds[1][1] = cy + d + padding; + rt->bounds[0][0] = cx - l - padding; + rt->bounds[1][0] = cx + l + padding; + rt->bounds[0][1] = cy - l - padding; + rt->bounds[1][1] = cy + l + padding; - rt->scale = d + padding; + rt->scale = l + padding; csr_update_subsamples( rt ); } @@ -203,6 +221,8 @@ void csr_draw( csr_target *rt, vmf_vert *triangles, u32 triangle_count, m4x3f tr // Derive normal matrix m4x3_to_3x3( transform, normal ); + + // NOTE: This isn't strictly necessary since CS:GO only uses uniform scaling. m3x3_inv_transpose( normal, normal ); for( u32 i = 0; i < triangle_count; i ++ ) @@ -225,7 +245,6 @@ void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, csr_filter *f m4x3f transform = M4X3_IDENTITY; vmf_solid solid; vmf_vert tri[3]; - vdf_node *ent_solid; boxf trf_bounds; u32 group_id = 0; @@ -265,6 +284,7 @@ void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, csr_filter *f if( filter_visgroups && !vmf_visgroup_match( brush, group_id ) ) continue; + // TODO: heap-use-after-free solidgen_push( &solid, brush ); } } @@ -326,7 +346,7 @@ void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, csr_filter *f else { // Brush entity - if( (ent_solid = vdf_next( ent, "solid", NULL )) ) + vdf_foreach( ent, "solid", ent_solid ) { solidgen_push( &solid, ent_solid ); }