Exemplo n.º 1
0
static void EmitVertexes_r (node_t* node)
{
	if (node->planenum == PLANENUM_LEAF)
		return;

	for (face_t* f = node->faces; f; f = f->next)
		EmitFaceVertexes(node, f);

	for (int i = 0; i < 2; i++)
		EmitVertexes_r(node->children[i]);
}
Exemplo n.º 2
0
/*
============
WriteBSP
============
*/
void WriteBSP (node_t *headnode, face_t *pLeafFaceList )
{
    int		i;
    int		oldfaces;
    int     oldorigfaces;

    c_nofaces = 0;
    c_facenodes = 0;

    qprintf ("--- WriteBSP ---\n");

    oldfaces = numfaces;
    oldorigfaces = numorigfaces;

    GetEdge2_InitOptimizedList();
    EmitLeafFaces( pLeafFaceList );
    dmodels[nummodels].headnode = EmitDrawNode_r (headnode);

    // Only emit area portals for the main world.
    if( nummodels == 0 )
    {
        EmitAreaPortals (headnode);
    }

    //
    // add all displacement faces for the particular model
    //
    for( i = 0; i < nummapdispinfo; i++ )
    {
        int entityIndex = GetDispInfoEntityNum( &mapdispinfo[i] );
        if( entityIndex == entity_num )
        {
            EmitFaceVertexes( NULL, &mapdispinfo[i].face );
            EmitFace( &mapdispinfo[i].face, FALSE );
        }
    }

    EmitWaterVolumesForBSP( &dmodels[nummodels], headnode );
    qprintf ("%5i nodes with faces\n", c_facenodes);
    qprintf ("%5i nodes without faces\n", c_nofaces);
    qprintf ("%5i faces\n", numfaces-oldfaces);
    qprintf( "%5i original faces\n", numorigfaces-oldorigfaces );
}