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;
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 );
}
// 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 ++ )
m4x3f transform = M4X3_IDENTITY;
vmf_solid solid;
vmf_vert tri[3];
- vdf_node *ent_solid;
boxf trf_bounds;
u32 group_id = 0;
if( filter_visgroups && !vmf_visgroup_match( brush, group_id ) )
continue;
+ // TODO: heap-use-after-free
solidgen_push( &solid, brush );
}
}
else
{
// Brush entity
- if( (ent_solid = vdf_next( ent, "solid", NULL )) )
+ vdf_foreach( ent, "solid", ent_solid )
{
solidgen_push( &solid, ent_solid );
}