1
0
Fork 0
flightgear/Stripe_u/init.c
1998-04-09 01:58:04 +00:00

217 lines
4.5 KiB
C

/********************************************************************/
/* STRIPE: converting a polygonal model to triangle strips
Francine Evans, 1996.
SUNY @ Stony Brook
Advisors: Steven Skiena and Amitabh Varshney
*/
/********************************************************************/
/*---------------------------------------------------------------------*/
/* STRIPE: init.c
This file contains the initialization of data structures.
*/
/*---------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include "global.h"
#include "polverts.h"
void init_vert_norms(int num_vert)
{
/* Initialize vertex/normal array to have all zeros to
start with.
*/
register int x;
for (x = 0; x < num_vert; x++)
*(vert_norms + x) = 0;
}
void init_vert_texture(int num_vert)
{
/* Initialize vertex/normal array to have all zeros to
start with.
*/
register int x;
for (x = 0; x < num_vert; x++)
*(vert_texture + x) = 0;
}
BOOL InitVertTable( int nSize )
{
register int nIndex;
/* Initialize the vertex table */
PolVerts = (ListHead**) malloc(sizeof(ListHead*) * nSize );
if ( PolVerts )
{
for ( nIndex=0; nIndex < nSize; nIndex++ )
{
PolVerts[nIndex] = NULL;
}
return( TRUE );
}
return( FALSE );
}
BOOL InitFaceTable( int nSize )
{
register int nIndex;
/* Initialize the face table */
PolFaces = (ListHead**) malloc(sizeof(ListHead*) * nSize );
if ( PolFaces )
{
for ( nIndex=0; nIndex < nSize; nIndex++ )
{
PolFaces[nIndex] = NULL;
}
return( TRUE );
}
return( FALSE );
}
BOOL InitEdgeTable( int nSize )
{
register int nIndex;
/* Initialize the edge table */
PolEdges = (ListHead**) malloc(sizeof(ListHead*) * nSize );
if ( PolEdges )
{
for ( nIndex=0; nIndex < nSize; nIndex++ )
{
PolEdges[nIndex] = NULL;
}
return( TRUE );
}
return( FALSE );
}
void InitStripTable( )
{
PLISTHEAD pListHead;
/* Initialize the strip table */
pListHead = ( PLISTHEAD ) malloc(sizeof(ListHead));
if ( pListHead )
{
InitList( pListHead );
strips[0] = pListHead;
}
else
{
printf("Out of memory !\n");
exit(0);
}
}
void Init_Table_SGI()
{
PLISTHEAD pListHead;
int max_adj = 60;
register int x;
/* This routine will initialize the table that will
have the faces sorted by the number of adjacent polygons
to it.
*/
for (x=0; x< max_adj; x++)
{
/* We are allowing the max number of sides of a polygon
to be max_adj.
*/
pListHead = ( PLISTHEAD ) malloc(sizeof(ListHead));
if ( pListHead )
{
InitList( pListHead );
array[x] = pListHead;
}
else
{
printf("Out of memory !\n");
exit(0);
}
}
}
void BuildVertTable( int nSize )
{
register int nIndex;
PLISTHEAD pListHead;
for ( nIndex=0; nIndex < nSize; nIndex++ )
{
pListHead = ( PLISTHEAD ) malloc(sizeof(ListHead));
if ( pListHead )
{
InitList( pListHead );
PolVerts[nIndex] = pListHead;
}
else
return;
}
}
void BuildFaceTable( int nSize )
{
register int nIndex;
PLISTHEAD pListHead;
for ( nIndex=0; nIndex < nSize; nIndex++ )
{
pListHead = ( PLISTHEAD ) malloc(sizeof(ListHead));
if ( pListHead )
{
InitList( pListHead );
PolFaces[nIndex] = pListHead;
}
else
return;
}
}
void BuildEdgeTable( int nSize )
{
register int nIndex;
PLISTHEAD pListHead;
for ( nIndex=0; nIndex < nSize; nIndex++ )
{
pListHead = ( PLISTHEAD ) malloc(sizeof(ListHead));
if ( pListHead )
{
InitList( pListHead );
PolEdges[nIndex] = pListHead;
}
else
return;
}
}
void Start_Face_Struct(int numfaces)
{
if (InitFaceTable(numfaces))
{
BuildFaceTable(numfaces);
}
}
void Start_Edge_Struct(int numverts)
{
if (InitEdgeTable(numverts))
{
BuildEdgeTable(numverts);
}
}