visgroup filtering
[csRadar.git] / csrDraw.h
index 30443343d4456e4d71497568672286cc1f88ed3a..b162b0fc556199fd7ab20edb8108bc547f514600 100644 (file)
--- a/csrDraw.h
+++ b/csrDraw.h
@@ -97,12 +97,19 @@ void csr_draw( csr_target *rt, vmf_vert *triangles, u32 triangle_count, m4x3f tr
        }
 }
 
-void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, int const group, m4x3f prev, m4x3f inst )
+void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, const char *group, m4x3f prev, m4x3f inst )
 {
        m4x3f transform = M4X3_IDENTITY;
        vmf_solid solid;
        vmf_vert tri[3];
 
+       u32 group_id = 0;
+       
+       if( group )
+       {
+               group_id = vmf_visgroup_id( root, group );
+       }
+
        // Multiply previous transform with instance transform to create basis
        if( prev )
        {
@@ -115,6 +122,9 @@ void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, int const gro
        
        vdf_foreach( world, "solid", brush )
        {
+               if( group && !vmf_visgroup_match( brush, group_id ) )
+                       continue;
+               
                solidgen_push( &solid, brush );
        }
 
@@ -136,6 +146,9 @@ void draw_vmf_group( csr_target *rt, vmf_map *map, vdf_node *root, int const gro
        
        vdf_foreach( root, "entity", ent )
        {
+               if( group && !vmf_visgroup_match( ent, group_id ) )
+                       continue;
+       
                if( ent->user & VMF_FLAG_IS_PROP )
                {
                        // Create model transform