]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - libs/picomodel/lwo/vmap.c
uncrustify! now the code is only ugly on the *inside*
[xonotic/netradiant.git] / libs / picomodel / lwo / vmap.c
index 69f87cf9b855faad2355195d0e65d990732237c0..897657252dbe19bf915d7c164a56ccca6b820b1b 100644 (file)
 /*
-======================================================================
-vmap.c
+   ======================================================================
+   vmap.c
 
-Vertex map functions for an LWO2 reader.
+   Vertex map functions for an LWO2 reader.
 
-Ernie Wright  17 Sep 00
-====================================================================== */
+   Ernie Wright  17 Sep 00
+   ====================================================================== */
 
 #include "../picointernal.h"
 #include "lwo2.h"
 
 
 /*
-======================================================================
-lwFreeVMap()
-
-Free memory used by an lwVMap.
-====================================================================== */
-
-void lwFreeVMap( lwVMap *vmap )
-{
-   if ( vmap ) {
-      if ( vmap->name ) _pico_free( vmap->name );
-      if ( vmap->vindex ) _pico_free( vmap->vindex );
-      if ( vmap->pindex ) _pico_free( vmap->pindex );
-      if ( vmap->val ) {
-         if ( vmap->val[ 0 ] ) _pico_free( vmap->val[ 0 ] );
-         _pico_free( vmap->val );
-      }
-      _pico_free( vmap );
-   }
+   ======================================================================
+   lwFreeVMap()
+
+   Free memory used by an lwVMap.
+   ====================================================================== */
+
+void lwFreeVMap( lwVMap *vmap ){
+       if ( vmap ) {
+               if ( vmap->name ) {
+                       _pico_free( vmap->name );
+               }
+               if ( vmap->vindex ) {
+                       _pico_free( vmap->vindex );
+               }
+               if ( vmap->pindex ) {
+                       _pico_free( vmap->pindex );
+               }
+               if ( vmap->val ) {
+                       if ( vmap->val[ 0 ] ) {
+                               _pico_free( vmap->val[ 0 ] );
+                       }
+                       _pico_free( vmap->val );
+               }
+               _pico_free( vmap );
+       }
 }
 
 
 /*
-======================================================================
-lwGetVMap()
+   ======================================================================
+   lwGetVMap()
 
-Read an lwVMap from a VMAP or VMAD chunk in an LWO2.
-====================================================================== */
+   Read an lwVMap from a VMAP or VMAD chunk in an LWO2.
+   ====================================================================== */
 
 lwVMap *lwGetVMap( picoMemStream_t *fp, int cksize, int ptoffset, int poloffset,
-   int perpoly )
-{
-   unsigned char *buf, *bp;
-   lwVMap *vmap;
-   float *f;
-   int i, j, npts, rlen;
-
-
-   /* read the whole chunk */
-
-   set_flen( 0 );
-   buf = getbytes( fp, cksize );
-   if ( !buf ) return NULL;
-
-   vmap = _pico_calloc( 1, sizeof( lwVMap ));
-   if ( !vmap ) {
-      _pico_free( buf );
-      return NULL;
-   }
-
-   /* initialize the vmap */
-
-   vmap->perpoly = perpoly;
-
-   bp = buf;
-   set_flen( 0 );
-   vmap->type = sgetU4( &bp );
-   vmap->dim  = sgetU2( &bp );
-   vmap->name = sgetS0( &bp );
-   rlen = get_flen();
-
-   /* count the vmap records */
-
-   npts = 0;
-   while ( bp < buf + cksize ) {
-      i = sgetVX( &bp );
-      if ( perpoly )
-         i = sgetVX( &bp );
-      bp += vmap->dim * sizeof( float );
-      ++npts;
-   }
-
-   /* allocate the vmap */
-
-   vmap->nverts = npts;
-   vmap->vindex = _pico_calloc( npts, sizeof( int ));
-   if ( !vmap->vindex ) goto Fail;
-   if ( perpoly ) {
-      vmap->pindex = _pico_calloc( npts, sizeof( int ));
-      if ( !vmap->pindex ) goto Fail;
-   }
-
-   if ( vmap->dim > 0 ) {
-      vmap->val = _pico_calloc( npts, sizeof( float * ));
-      if ( !vmap->val ) goto Fail;
-      f = _pico_alloc( npts * vmap->dim * sizeof( float ));
-      if ( !f ) goto Fail;
-      for ( i = 0; i < npts; i++ )
-         vmap->val[ i ] = f + i * vmap->dim;
-   }
-
-   /* fill in the vmap values */
-
-   bp = buf + rlen;
-   for ( i = 0; i < npts; i++ ) {
-      vmap->vindex[ i ] = sgetVX( &bp );
-      if ( perpoly )
-         vmap->pindex[ i ] = sgetVX( &bp );
-      for ( j = 0; j < vmap->dim; j++ )
-         vmap->val[ i ][ j ] = sgetF4( &bp );
-   }
-
-   _pico_free( buf );
-   return vmap;
+                                  int perpoly ){
+       unsigned char *buf, *bp;
+       lwVMap *vmap;
+       float *f;
+       int i, j, npts, rlen;
+
+
+       /* read the whole chunk */
+
+       set_flen( 0 );
+       buf = getbytes( fp, cksize );
+       if ( !buf ) {
+               return NULL;
+       }
+
+       vmap = _pico_calloc( 1, sizeof( lwVMap ) );
+       if ( !vmap ) {
+               _pico_free( buf );
+               return NULL;
+       }
+
+       /* initialize the vmap */
+
+       vmap->perpoly = perpoly;
+
+       bp = buf;
+       set_flen( 0 );
+       vmap->type = sgetU4( &bp );
+       vmap->dim  = sgetU2( &bp );
+       vmap->name = sgetS0( &bp );
+       rlen = get_flen();
+
+       /* count the vmap records */
+
+       npts = 0;
+       while ( bp < buf + cksize ) {
+               i = sgetVX( &bp );
+               if ( perpoly ) {
+                       i = sgetVX( &bp );
+               }
+               bp += vmap->dim * sizeof( float );
+               ++npts;
+       }
+
+       /* allocate the vmap */
+
+       vmap->nverts = npts;
+       vmap->vindex = _pico_calloc( npts, sizeof( int ) );
+       if ( !vmap->vindex ) {
+               goto Fail;
+       }
+       if ( perpoly ) {
+               vmap->pindex = _pico_calloc( npts, sizeof( int ) );
+               if ( !vmap->pindex ) {
+                       goto Fail;
+               }
+       }
+
+       if ( vmap->dim > 0 ) {
+               vmap->val = _pico_calloc( npts, sizeof( float * ) );
+               if ( !vmap->val ) {
+                       goto Fail;
+               }
+               f = _pico_alloc( npts * vmap->dim * sizeof( float ) );
+               if ( !f ) {
+                       goto Fail;
+               }
+               for ( i = 0; i < npts; i++ )
+                       vmap->val[ i ] = f + i * vmap->dim;
+       }
+
+       /* fill in the vmap values */
+
+       bp = buf + rlen;
+       for ( i = 0; i < npts; i++ ) {
+               vmap->vindex[ i ] = sgetVX( &bp );
+               if ( perpoly ) {
+                       vmap->pindex[ i ] = sgetVX( &bp );
+               }
+               for ( j = 0; j < vmap->dim; j++ )
+                       vmap->val[ i ][ j ] = sgetF4( &bp );
+       }
+
+       _pico_free( buf );
+       return vmap;
 
 Fail:
-   if ( buf ) _pico_free( buf );
-   lwFreeVMap( vmap );
-   return NULL;
+       if ( buf ) {
+               _pico_free( buf );
+       }
+       lwFreeVMap( vmap );
+       return NULL;
 }
 
 
 /*
-======================================================================
-lwGetPointVMaps()
-
-Fill in the lwVMapPt structure for each point.
-====================================================================== */
-
-int lwGetPointVMaps( lwPointList *point, lwVMap *vmap )
-{
-   lwVMap *vm;
-   int i, j, n;
-
-   /* count the number of vmap values for each point */
-
-   vm = vmap;
-   while ( vm ) {
-      if ( !vm->perpoly )
-         for ( i = 0; i < vm->nverts; i++ )
-            ++point->pt[ vm->vindex[ i ]].nvmaps;
-      vm = vm->next;
-   }
-
-   /* allocate vmap references for each mapped point */
-
-   for ( i = 0; i < point->count; i++ ) {
-      if ( point->pt[ i ].nvmaps ) {
-         point->pt[ i ].vm = _pico_calloc( point->pt[ i ].nvmaps, sizeof( lwVMapPt ));
-         if ( !point->pt[ i ].vm ) return 0;
-         point->pt[ i ].nvmaps = 0;
-      }
-   }
-
-   /* fill in vmap references for each mapped point */
-
-   vm = vmap;
-   while ( vm ) {
-      if ( !vm->perpoly ) {
-         for ( i = 0; i < vm->nverts; i++ ) {
-            j = vm->vindex[ i ];
-            n = point->pt[ j ].nvmaps;
-            point->pt[ j ].vm[ n ].vmap = vm;
-            point->pt[ j ].vm[ n ].index = i;
-            ++point->pt[ j ].nvmaps;
-         }
-      }
-      vm = vm->next;
-   }
-
-   return 1;
+   ======================================================================
+   lwGetPointVMaps()
+
+   Fill in the lwVMapPt structure for each point.
+   ====================================================================== */
+
+int lwGetPointVMaps( lwPointList *point, lwVMap *vmap ){
+       lwVMap *vm;
+       int i, j, n;
+
+       /* count the number of vmap values for each point */
+
+       vm = vmap;
+       while ( vm ) {
+               if ( !vm->perpoly ) {
+                       for ( i = 0; i < vm->nverts; i++ )
+                               ++point->pt[ vm->vindex[ i ]].nvmaps;
+               }
+               vm = vm->next;
+       }
+
+       /* allocate vmap references for each mapped point */
+
+       for ( i = 0; i < point->count; i++ ) {
+               if ( point->pt[ i ].nvmaps ) {
+                       point->pt[ i ].vm = _pico_calloc( point->pt[ i ].nvmaps, sizeof( lwVMapPt ) );
+                       if ( !point->pt[ i ].vm ) {
+                               return 0;
+                       }
+                       point->pt[ i ].nvmaps = 0;
+               }
+       }
+
+       /* fill in vmap references for each mapped point */
+
+       vm = vmap;
+       while ( vm ) {
+               if ( !vm->perpoly ) {
+                       for ( i = 0; i < vm->nverts; i++ ) {
+                               j = vm->vindex[ i ];
+                               n = point->pt[ j ].nvmaps;
+                               point->pt[ j ].vm[ n ].vmap = vm;
+                               point->pt[ j ].vm[ n ].index = i;
+                               ++point->pt[ j ].nvmaps;
+                       }
+               }
+               vm = vm->next;
+       }
+
+       return 1;
 }
 
 
 /*
-======================================================================
-lwGetPolyVMaps()
-
-Fill in the lwVMapPt structure for each polygon vertex.
-====================================================================== */
-
-int lwGetPolyVMaps( lwPolygonList *polygon, lwVMap *vmap )
-{
-   lwVMap *vm;
-   lwPolVert *pv;
-   int i, j;
-
-   /* count the number of vmap values for each polygon vertex */
-
-   vm = vmap;
-   while ( vm ) {
-      if ( vm->perpoly ) {
-         for ( i = 0; i < vm->nverts; i++ ) {
-            for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) {
-               pv = &polygon->pol[ vm->pindex[ i ]].v[ j ];
-               if ( vm->vindex[ i ] == pv->index ) {
-                  ++pv->nvmaps;
-                  break;
-               }
-            }
-         }
-      }
-      vm = vm->next;
-   }
-
-   /* allocate vmap references for each mapped vertex */
-
-   for ( i = 0; i < polygon->count; i++ ) {
-      for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) {
-         pv = &polygon->pol[ i ].v[ j ];
-         if ( pv->nvmaps ) {
-            pv->vm = _pico_calloc( pv->nvmaps, sizeof( lwVMapPt ));
-            if ( !pv->vm ) return 0;
-            pv->nvmaps = 0;
-         }
-      }
-   }
-
-   /* fill in vmap references for each mapped point */
-
-   vm = vmap;
-   while ( vm ) {
-      if ( vm->perpoly ) {
-         for ( i = 0; i < vm->nverts; i++ ) {
-            for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) {
-               pv = &polygon->pol[ vm->pindex[ i ]].v[ j ];
-               if ( vm->vindex[ i ] == pv->index ) {
-                  pv->vm[ pv->nvmaps ].vmap = vm;
-                  pv->vm[ pv->nvmaps ].index = i;
-                  ++pv->nvmaps;
-                  break;
-               }
-            }
-         }
-      }
-      vm = vm->next;
-   }
-
-   return 1;
+   ======================================================================
+   lwGetPolyVMaps()
+
+   Fill in the lwVMapPt structure for each polygon vertex.
+   ====================================================================== */
+
+int lwGetPolyVMaps( lwPolygonList *polygon, lwVMap *vmap ){
+       lwVMap *vm;
+       lwPolVert *pv;
+       int i, j;
+
+       /* count the number of vmap values for each polygon vertex */
+
+       vm = vmap;
+       while ( vm ) {
+               if ( vm->perpoly ) {
+                       for ( i = 0; i < vm->nverts; i++ ) {
+                               for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) {
+                                       pv = &polygon->pol[ vm->pindex[ i ]].v[ j ];
+                                       if ( vm->vindex[ i ] == pv->index ) {
+                                               ++pv->nvmaps;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+               vm = vm->next;
+       }
+
+       /* allocate vmap references for each mapped vertex */
+
+       for ( i = 0; i < polygon->count; i++ ) {
+               for ( j = 0; j < polygon->pol[ i ].nverts; j++ ) {
+                       pv = &polygon->pol[ i ].v[ j ];
+                       if ( pv->nvmaps ) {
+                               pv->vm = _pico_calloc( pv->nvmaps, sizeof( lwVMapPt ) );
+                               if ( !pv->vm ) {
+                                       return 0;
+                               }
+                               pv->nvmaps = 0;
+                       }
+               }
+       }
+
+       /* fill in vmap references for each mapped point */
+
+       vm = vmap;
+       while ( vm ) {
+               if ( vm->perpoly ) {
+                       for ( i = 0; i < vm->nverts; i++ ) {
+                               for ( j = 0; j < polygon->pol[ vm->pindex[ i ]].nverts; j++ ) {
+                                       pv = &polygon->pol[ vm->pindex[ i ]].v[ j ];
+                                       if ( vm->vindex[ i ] == pv->index ) {
+                                               pv->vm[ pv->nvmaps ].vmap = vm;
+                                               pv->vm[ pv->nvmaps ].index = i;
+                                               ++pv->nvmaps;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+               vm = vm->next;
+       }
+
+       return 1;
 }