]> git.xonotic.org Git - xonotic/netradiant.git/commitdiff
Merge branch 'picomodel-obj-surface-vertexes' into 'master'
authorThomas Debesse <gitlab@illwieckz.net>
Sun, 4 Nov 2018 17:45:56 +0000 (17:45 +0000)
committerThomas Debesse <gitlab@illwieckz.net>
Sun, 4 Nov 2018 17:45:56 +0000 (17:45 +0000)
Fix over allocating vertexes for OBJ models with multiple surfaces

See merge request xonotic/netradiant!107

1  2 
libs/picomodel/pm_obj.c

diff --combined libs/picomodel/pm_obj.c
index e5e03e41217778de07bb41ac14f120c28e0ff889,32bdbd258213588c314d24a5c2f374d090ac4f3b..6e11a1cdbaca6875bce3d01f474b0212a690f375
@@@ -291,7 -291,7 +291,7 @@@ static int _obj_mtl_load( picoModel_t *
  
                        /* validate material name */
                        if ( name == NULL || !strlen( name ) ) {
 -                              _pico_printf( PICO_ERROR,"Missing material name in MTL, line %d.",p->curLine );
 +                              _pico_printf( PICO_ERROR,"Missing material name in MTL %s, line %d.",fileName,p->curLine );
                                _obj_mtl_error_return;
                        }
                        /* create a new pico shader */
  
                        /* validate map name */
                        if ( mapName == NULL || !strlen( mapName ) ) {
 -                              _pico_printf( PICO_ERROR,"Missing material map name in MTL, line %d.",p->curLine );
 +                              _pico_printf( PICO_ERROR,"Missing material map name in MTL %s, line %d.",fileName,p->curLine );
                                _obj_mtl_error_return;
                        }
                        /* create a new pico shader */
@@@ -524,8 -524,9 +524,9 @@@ static picoModel_t *_obj_load( PM_PARAM
                newSurface = PicoNewSurface( model ); \
                if ( newSurface == NULL ) {     \
                        _obj_error_return( "Error allocating surface" ); } \
-               /* reset face index for surface */ \
+               /* reset face index and vertex index for surface */ \
                curFace = 0; \
+               curVertex = 0; \
                /* if we can, assign the previous shader to this surface */     \
                if ( curSurface ) {     \
                        PicoSetSurfaceShader( newSurface, curSurface->shader ); } \
                        int i;
  
                        if ( curSurface == NULL ) {
 -                              _pico_printf( PICO_WARNING,"No group defined for faces, so creating an autoSurface in OBJ, line %d.",p->curLine );
 +                              _pico_printf( PICO_WARNING,"No group defined for faces, so creating an autoSurface in OBJ %s, line %d.",model->fileName,p->curLine );
                                AUTO_GROUPNAME( autoGroupNameBuf );
                                NEW_SURFACE( autoGroupNameBuf );
                        }
                        name = _pico_parse( p,0 );
  
                        if ( curFace != 0 || curSurface == NULL ) {
 -                              _pico_printf( PICO_WARNING,"No group defined for usemtl, so creating an autoSurface in OBJ, line %d.",p->curLine );
 +                              _pico_printf( PICO_WARNING,"No group defined for usemtl, so creating an autoSurface in OBJ %s, line %d.",model->fileName,p->curLine );
                                AUTO_GROUPNAME( autoGroupNameBuf );
                                NEW_SURFACE( autoGroupNameBuf );
                        }
  
                        /* validate material name */
                        if ( name == NULL || !strlen( name ) ) {
 -                              _pico_printf( PICO_ERROR,"Missing material name in OBJ, line %d.",p->curLine );
 +                              _pico_printf( PICO_ERROR,"Missing material name in OBJ %s, line %d.",model->fileName,p->curLine );
                        }
                        else
                        {
                                shader = PicoFindShader( model, name, 1 );
                                if ( shader == NULL ) {
 -                                      _pico_printf( PICO_WARNING,"Undefined material name in OBJ, line %d. Making a default shader.",p->curLine );
 +                                      _pico_printf( PICO_WARNING,"Undefined material name \"%s\" in OBJ %s, line %d. Making a default shader.",name,model->fileName,p->curLine );
  
                                        /* create a new pico shader */
                                        shader = PicoNewShader( model );