[Plib-cvs] plib/src/ssg ssg.h,1.174,1.175 ssgLoadAC.cxx,1.34,1.35 ssgOptimiser.cxx,1.35,1.36 ssgSave
Brought to you by:
sjbaker
From: Wolfram K. <wol...@us...> - 2004-12-01 08:28:18
|
Update of /cvsroot/plib/plib/src/ssg In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20212/ssg Modified Files: ssg.h ssgLoadAC.cxx ssgOptimiser.cxx ssgSaveAC.cxx ssgTransform.cxx ssgVtxArray.cxx ssgVtxTable.cxx Log Message: Patch by Mathias Fröhlich. For the discussion, see the thread "[Plib-devel] [PATCH] crease for ac3d files and speedup" in the mailing list, starting Fri, 8 Oct 2004. Implemented "crease" feature in AC files. AC loader cleanup. Optimisations for runtime speed. In ssgOptimizer.cxx, in the stripify function, check whether the nodes are named. Index: ssg.h =================================================================== RCS file: /cvsroot/plib/plib/src/ssg/ssg.h,v retrieving revision 1.174 retrieving revision 1.175 diff -u -d -r1.174 -r1.175 --- ssg.h 29 Oct 2004 22:24:08 -0000 1.174 +++ ssg.h 1 Dec 2004 08:28:05 -0000 1.175 @@ -1472,18 +1472,14 @@ void getTexCoordList ( void **list ) { *list = texcoords -> get ( 0 ) ; } void getColourList ( void **list ) { *list = colours -> get ( 0 ) ; } - float *getVertex (int i){ if(i>=getNumVertices())i=getNumVertices()-1; - return (getNumVertices()<=0) ? - _ssgVertex000 : vertices->get(i);} - float *getNormal (int i){ if(i>=getNumNormals())i=getNumNormals()-1; - return (getNumNormals()<=0) ? - _ssgNormalUp : normals->get(i);} - float *getTexCoord(int i){ if(i>=getNumTexCoords())i=getNumTexCoords()-1; - return (getNumTexCoords()<=0) ? - _ssgTexCoord00 : texcoords->get(i);} - float *getColour (int i){ if(i>=getNumColours())i=getNumColours()-1; - return (getNumColours()<=0) ? - _ssgColourWhite : colours->get(i);} + float *getVertex (int i){ int nv=getNumVertices(); if(i>=nv)i=nv-1; + return (nv<=0) ? _ssgVertex000:vertices->get(i);} + float *getNormal (int i){ int nn=getNumNormals(); if(i>=nn)i=nn-1; + return (nn<=0) ? _ssgNormalUp:normals->get(i);} + float *getTexCoord(int i){ int nc=getNumTexCoords(); if(i>=nc)i=nc-1; + return (nc<=0) ? _ssgTexCoord00:texcoords->get(i);} + float *getColour (int i){ int nc=getNumColours(); if(i>=nc)i=nc-1; + return (nc<=0) ? _ssgColourWhite:colours->get(i);} ssgVtxArray *getAs_ssgVtxArray (); @@ -1589,9 +1585,8 @@ void getIndexList ( void **list ) { *list = indices -> get ( 0 ) ; } - short *getIndex (int i){ if(i>=getNumIndices())i=getNumIndices()-1; - return (getNumIndices()<=0) ? - &_ssgIndex0 : indices->get(i);} + short *getIndex (int i){ int ni=getNumIndices();if(i>=ni)i=ni-1; + return (ni<=0) ? &_ssgIndex0 : indices->get(i);} void removeUnusedVertices(); virtual ~ssgVtxArray (void) ; Index: ssgLoadAC.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/ssg/ssgLoadAC.cxx,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- ssgLoadAC.cxx 2 Oct 2004 12:12:28 -0000 1.34 +++ ssgLoadAC.cxx 1 Dec 2004 08:28:05 -0000 1.35 @@ -23,35 +23,43 @@ #include "ssgLocal.h" +#include "ssgVertSplitter.h" static FILE *loader_fd ; struct _ssgMaterial { + sgVec4 rgba ; sgVec4 spec ; [...565 lines suppressed...] - vtab = NULL ; - current_material = NULL ; - current_colour = NULL ; current_tfname = NULL ; current_branch = NULL ; + current_crease = 61.0 ; + sgSetVec2 ( texrep, 1.0, 1.0 ) ; sgSetVec2 ( texoff, 0.0, 0.0 ) ; @@ -698,7 +938,6 @@ delete [] current_tfname ; current_tfname = NULL ; - delete [] vtab ; fclose ( loader_fd ) ; return current_branch ; Index: ssgOptimiser.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/ssg/ssgOptimiser.cxx,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- ssgOptimiser.cxx 4 Oct 2004 08:18:26 -0000 1.35 +++ ssgOptimiser.cxx 1 Dec 2004 08:28:05 -0000 1.36 @@ -869,7 +869,7 @@ switch ( b_ent -> getNumKids () ) { case 0: - if ( b_ent -> getUserData() == NULL ) + if ( b_ent -> getUserData() == NULL && b_ent -> getName () == NULL ) safe_replace_kid ( NULL, b_ent, NULL ) ; break; @@ -877,7 +877,13 @@ if ( b_ent -> isA ( ssgTypeBranch () ) && b_ent -> getUserData () == NULL ) { - safe_replace_kid ( NULL, b_ent, b_ent -> getKid ( 0 ) ) ; + ssgEntity *k = b_ent -> getKid ( 0 ) ; + if ( b_ent -> getName () != NULL && k -> getName () != NULL ) + break; + if ( b_ent -> getName () != NULL ) + k -> setName ( b_ent -> getName () ) ; + + safe_replace_kid ( NULL, b_ent, k ) ; } else if ( ! b_ent -> isAKindOf ( ssgTypeSelector () ) && b_ent -> getKid ( 0 ) -> isA ( ssgTypeBranch () ) && Index: ssgSaveAC.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/ssg/ssgSaveAC.cxx,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- ssgSaveAC.cxx 4 May 2004 12:43:54 -0000 1.20 +++ ssgSaveAC.cxx 1 Dec 2004 08:28:05 -0000 1.21 @@ -119,7 +119,7 @@ for ( i = 0 ; i < num_tris ; i++ ) { - fprintf ( save_fd, "SURF 0x0\n" ) ; + fprintf ( save_fd, "SURF 0x0%x\n", (! vt -> getCullFace () ) << 5 ) ; ssgState *s = vt->getState (); int istate = 0; Index: ssgTransform.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/ssg/ssgTransform.cxx,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- ssgTransform.cxx 29 Nov 2002 19:39:48 -0000 1.13 +++ ssgTransform.cxx 1 Dec 2004 08:28:05 -0000 1.14 @@ -165,33 +165,36 @@ void ssgTransform::setTransform ( sgVec3 xyz ) { - updateTransform () ; - sgMakeTransMat4 ( transform, xyz ) ; - firsttime () ; - dirtyBSphere () ; + sgMat4 tmp_trans; + sgMakeTransMat4 ( tmp_trans, xyz ) ; + setTransform ( tmp_trans ) ; } void ssgTransform::setTransform ( sgCoord *xform ) { - updateTransform () ; - sgMakeCoordMat4 ( transform, xform ) ; - firsttime () ; - dirtyBSphere () ; + sgMat4 tmp_trans; + sgMakeCoordMat4 ( tmp_trans, xform ) ; + setTransform ( tmp_trans ) ; } void ssgTransform::setTransform ( sgCoord *xform, float sx, float sy, float sz ) { - updateTransform () ; - sgMakeCoordMat4 ( transform, xform ) ; - sgScaleVec3 ( transform[0], sx ) ; - sgScaleVec3 ( transform[1], sy ) ; - sgScaleVec3 ( transform[2], sz ) ; - firsttime () ; - dirtyBSphere () ; + sgMat4 tmp_trans; + sgMakeCoordMat4 ( tmp_trans, xform ) ; + sgScaleVec3 ( tmp_trans[0], sx ) ; + sgScaleVec3 ( tmp_trans[1], sy ) ; + sgScaleVec3 ( tmp_trans[2], sz ) ; + setTransform ( tmp_trans ); } void ssgTransform::setTransform ( sgMat4 xform ) { + if ( sgEqualVec4( xform[0], transform[0] ) && + sgEqualVec4( xform[1], transform[1] ) && + sgEqualVec4( xform[2], transform[2] ) && + sgEqualVec4( xform[3], transform[3] ) ) + return; + updateTransform () ; sgCopyMat4 ( transform, xform ) ; firsttime () ; Index: ssgVtxArray.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/ssg/ssgVtxArray.cxx,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- ssgVtxArray.cxx 13 Sep 2004 12:01:15 -0000 1.28 +++ ssgVtxArray.cxx 1 Dec 2004 08:28:05 -0000 1.29 @@ -195,13 +195,13 @@ return; } if(normals) - if(normals->getNum() != 0) + if(1 < normals->getNum()) doNormals = TRUE; if(texcoords) - if(texcoords->getNum() != 0) + if(1 < texcoords->getNum()) doTexCoords = TRUE; if(colours) - if(colours->getNum() != 0) + if(1 < colours->getNum()) doColours = TRUE; long * oldIndex2NewIndex = new long[vertices->getNum()]; Index: ssgVtxTable.cxx =================================================================== RCS file: /cvsroot/plib/plib/src/ssg/ssgVtxTable.cxx,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- ssgVtxTable.cxx 13 Sep 2004 11:43:08 -0000 1.37 +++ ssgVtxTable.cxx 1 Dec 2004 08:28:05 -0000 1.38 @@ -407,7 +407,9 @@ */ - for ( i = 0 ; i < getNumVertices() ; i++ ) + int num_vertices = getNumVertices () ; + int num_normals = getNumNormals () ; + for ( i = 0 ; i < num_vertices ; i++ ) sgXformPnt3 ( vertices->get(i), vertices->get(i), m ) ; @@ -444,17 +446,17 @@ sgScaleVec3 ( w[2], m[2], scale ) ; } - for ( i = 0 ; i < getNumNormals() ; i++ ) + for ( i = 0 ; i < num_normals ; i++ ) sgXformVec3 ( normals->get(i), normals->get(i), w ) ; } else - for ( i = 0 ; i < getNumNormals() ; i++ ) + for ( i = 0 ; i < num_normals ; i++ ) sgXformVec3 ( normals->get(i), normals->get(i), m ) ; if ( ( flags & SG_NONORTHO ) ) { - for ( i = 0 ; i < getNumNormals() ; i++ ) + for ( i = 0 ; i < num_normals ; i++ ) sgNormaliseVec3 ( normals->get(i) ) ; } @@ -468,7 +470,8 @@ emptyBSphere () ; bbox . empty () ; - for ( int i = 0 ; i < getNumVertices() ; i++ ) + int num_vertices = getNumVertices () ; + for ( int i = 0 ; i < num_vertices ; i++ ) bbox . extend ( vertices->get(i) ) ; extendBSphere ( & bbox ) ; |