//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #include "DTSTypes.h" #include "DTSShape.h" #include "DTSMesh.h" #include "DTSPlusTypes.h" #include "DTSUtil.h" #include "dtsBitMatrix.h" // see comment in dtsMatrix.h namespace DTS { class Stripper { std::vector numAdjacent; std::vector used; BitMatrix adjacent; std::vector vertexCache; std::vector recentFaces; S32 currentFace; bool limitStripLength; S32 bestLength; U32 cacheMisses; std::vector strips; std::vector stripIndices; std::vector & faces; std::vector & faceIndices; void clearCache(); void addToCache(S32 vertexIndex); void addToCache(S32 vertexIndex, U32 posFromBack); void getVerts(S32 face, S32 & oldVert0, S32 & oldVert1, S32 & addVert); void rotateFace(S32 start, std::vector & indices); bool swapNeeded(S32 oldVert0, S32 oldVert1); F32 getScore(S32 face, bool ignoreOrder); bool faceHasEdge(S32 face, U32 idx0, U32 idx1); void getAdjacentFaces(S32 startFace, S32 endFace, S32 face, S32 & face0, S32 & face1, S32 & face2); void setAdjacency(S32 startFace, S32 endFace); bool startStrip(Primitive & strip, S32 startFace, S32 endFace); bool addStrip(Primitive & strip, S32 startFace, S32 endFace); bool stripLongEnough(S32 startFace, S32 endFace); void testCache(S32 addedFace); bool canGo(S32 face); void makeStripsB(); // makeStrips() from faces...assumes all faces have same material index void copyParams(Stripper *from); public: Stripper(std::vector & faces, std::vector & indices); Stripper(Stripper &); ~Stripper(); void makeStrips(); S32 continueStrip(S32 startFace, S32 endFace, S32 len, S32 restart); // used for simulation... void getStrips(std::vector & s, std::vector & si) { s=strips; si=stripIndices; } void setLimitStripLength(bool lim) { limitStripLength = lim; } void resetCacheMisses() { cacheMisses = 0; } U32 getCacheMisses() { return cacheMisses; } // adjust strip building strategy static F32 adjacencyWeight; static F32 noswapWeight; static F32 alreadyCachedWeight; static U32 cacheSize; static U32 simK; }; }