diff options
Diffstat (limited to 'thirdparty/bullet/src/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp')
-rw-r--r-- | thirdparty/bullet/src/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp | 423 |
1 files changed, 0 insertions, 423 deletions
diff --git a/thirdparty/bullet/src/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp b/thirdparty/bullet/src/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp deleted file mode 100644 index c3ceb8388c..0000000000 --- a/thirdparty/bullet/src/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp +++ /dev/null @@ -1,423 +0,0 @@ -/* -bParse -Copyright (c) 2006-2010 Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "b3BulletFile.h" -#include "b3Defines.h" -#include "b3DNA.h" - -#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__) -#include <memory.h> -#endif -#include <string.h> - - -// 32 && 64 bit versions -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -#ifdef _WIN64 -extern char b3s_bulletDNAstr64[]; -extern int b3s_bulletDNAlen64; -#else -extern char b3s_bulletDNAstr[]; -extern int b3s_bulletDNAlen; -#endif //_WIN64 -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - -extern char b3s_bulletDNAstr64[]; -extern int b3s_bulletDNAlen64; -extern char b3s_bulletDNAstr[]; -extern int b3s_bulletDNAlen; - -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - -using namespace bParse; - -b3BulletFile::b3BulletFile() -:bFile("", "BULLET ") -{ - mMemoryDNA = new bDNA(); //this memory gets released in the bFile::~bFile destructor,@todo not consistent with the rule 'who allocates it, has to deallocate it" - - m_DnaCopy = 0; - - -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -#ifdef _WIN64 - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen64); -#else//_WIN64 - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen); -#endif//_WIN64 -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - m_DnaCopy = (char*) b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen64); - } - else - { - m_DnaCopy =(char*) b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - mMemoryDNA->init(m_DnaCopy,b3s_bulletDNAlen); - } -#endif//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -} - - - -b3BulletFile::b3BulletFile(const char* fileName) -:bFile(fileName, "BULLET ") -{ - m_DnaCopy = 0; -} - - - -b3BulletFile::b3BulletFile(char *memoryBuffer, int len) -:bFile(memoryBuffer,len, "BULLET ") -{ - m_DnaCopy = 0; -} - - -b3BulletFile::~b3BulletFile() -{ - if (m_DnaCopy) - b3AlignedFree(m_DnaCopy); - - - while (m_dataBlocks.size()) - { - char* dataBlock = m_dataBlocks[m_dataBlocks.size()-1]; - delete[] dataBlock; - m_dataBlocks.pop_back(); - } - -} - - - -// ----------------------------------------------------- // -void b3BulletFile::parseData() -{ -// printf ("Building datablocks"); -// printf ("Chunk size = %d",CHUNK_HEADER_LEN); -// printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags)); - - const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0; - - //const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0; - - - mDataStart = 12; - - char *dataPtr = mFileBuffer+mDataStart; - - bChunkInd dataChunk; - dataChunk.code = 0; - - - //dataPtr += ChunkUtils::getNextBlock(&dataChunk, dataPtr, mFlags); - int seek = getNextBlock(&dataChunk, dataPtr, mFlags); - - - if (mFlags &FD_ENDIAN_SWAP) - swapLen(dataPtr); - - //dataPtr += ChunkUtils::getOffset(mFlags); - char *dataPtrHead = 0; - - while (dataChunk.code != B3_DNA1) - { - if (!brokenDNA || (dataChunk.code != B3_QUANTIZED_BVH_CODE) ) - { - - // one behind - if (dataChunk.code == B3_SDNA) break; - //if (dataChunk.code == DNA1) break; - - // same as (BHEAD+DATA dependency) - dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags); - if (dataChunk.dna_nr>=0) - { - char *id = readStruct(dataPtrHead, dataChunk); - - // lookup maps - if (id) - { - m_chunkPtrPtrMap.insert(dataChunk.oldPtr, dataChunk); - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id); - - m_chunks.push_back(dataChunk); - // block it - //bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code); - //if (listID) - // listID->push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_SOFTBODY_CODE) - { - m_softBodies.push_back((bStructHandle*) id); - } - - if (dataChunk.code == B3_RIGIDBODY_CODE) - { - m_rigidBodies.push_back((bStructHandle*) id); - } - - if (dataChunk.code == B3_DYNAMICSWORLD_CODE) - { - m_dynamicsWorldInfo.push_back((bStructHandle*) id); - } - - if (dataChunk.code == B3_CONSTRAINT_CODE) - { - m_constraints.push_back((bStructHandle*) id); - } - - if (dataChunk.code == B3_QUANTIZED_BVH_CODE) - { - m_bvhs.push_back((bStructHandle*) id); - } - - if (dataChunk.code == B3_TRIANLGE_INFO_MAP) - { - m_triangleInfoMaps.push_back((bStructHandle*) id); - } - - if (dataChunk.code == B3_COLLISIONOBJECT_CODE) - { - m_collisionObjects.push_back((bStructHandle*) id); - } - - if (dataChunk.code == B3_SHAPE_CODE) - { - m_collisionShapes.push_back((bStructHandle*) id); - } - - // if (dataChunk.code == GLOB) - // { - // m_glob = (bStructHandle*) id; - // } - } else - { - //printf("unknown chunk\n"); - - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead); - } - } else - { - printf("skipping B3_QUANTIZED_BVH_CODE due to broken DNA\n"); - } - - - dataPtr += seek; - - seek = getNextBlock(&dataChunk, dataPtr, mFlags); - if (mFlags &FD_ENDIAN_SWAP) - swapLen(dataPtr); - - if (seek < 0) - break; - } - -} - -void b3BulletFile::addDataBlock(char* dataBlock) -{ - m_dataBlocks.push_back(dataBlock); - -} - - - - -void b3BulletFile::writeDNA(FILE* fp) -{ - - bChunkInd dataChunk; - dataChunk.code = B3_DNA1; - dataChunk.dna_nr = 0; - dataChunk.nr = 1; -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { -#ifdef _WIN64 - dataChunk.len = b3s_bulletDNAlen64; - dataChunk.oldPtr = b3s_bulletDNAstr64; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64,1,fp); -#else - b3Assert(0); -#endif - } - else - { -#ifndef _WIN64 - dataChunk.len = b3s_bulletDNAlen; - dataChunk.oldPtr = b3s_bulletDNAstr; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen,1,fp); -#else//_WIN64 - b3Assert(0); -#endif//_WIN64 - } -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - dataChunk.len = b3s_bulletDNAlen64; - dataChunk.oldPtr = b3s_bulletDNAstr64; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64,1,fp); - } - else - { - dataChunk.len = b3s_bulletDNAlen; - dataChunk.oldPtr = b3s_bulletDNAstr; - fwrite(&dataChunk,sizeof(bChunkInd),1,fp); - fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen,1,fp); - } -#endif//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -} - - -void b3BulletFile::parse(int verboseMode) -{ -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { -#ifdef _WIN64 - - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - parseInternal(verboseMode,(char*)b3s_bulletDNAstr64,b3s_bulletDNAlen64); -#else - b3Assert(0); -#endif - } - else - { -#ifndef _WIN64 - - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - parseInternal(verboseMode,m_DnaCopy,b3s_bulletDNAlen); -#else - b3Assert(0); -#endif - } -#else//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr64,b3s_bulletDNAlen64); - parseInternal(verboseMode,m_DnaCopy,b3s_bulletDNAlen64); - } - else - { - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen,16); - memcpy(m_DnaCopy,b3s_bulletDNAstr,b3s_bulletDNAlen); - parseInternal(verboseMode,m_DnaCopy,b3s_bulletDNAlen); - } -#endif//B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - - //the parsing will convert to cpu endian - mFlags &=~FD_ENDIAN_SWAP; - - int littleEndian= 1; - littleEndian= ((char*)&littleEndian)[0]; - - mFileBuffer[8] = littleEndian?'v':'V'; - -} - -// experimental -int b3BulletFile::write(const char* fileName, bool fixupPointers) -{ - FILE *fp = fopen(fileName, "wb"); - if (fp) - { - char header[B3_SIZEOFBLENDERHEADER] ; - memcpy(header, m_headerString, 7); - int endian= 1; - endian= ((char*)&endian)[0]; - - if (endian) - { - header[7] = '_'; - } else - { - header[7] = '-'; - } - if (VOID_IS_8) - { - header[8]='V'; - } else - { - header[8]='v'; - } - - header[9] = '2'; - header[10] = '7'; - header[11] = '5'; - - fwrite(header,B3_SIZEOFBLENDERHEADER,1,fp); - - writeChunks(fp, fixupPointers); - - writeDNA(fp); - - fclose(fp); - - } else - { - printf("Error: cannot open file %s for writing\n",fileName); - return 0; - } - return 1; -} - - - -void b3BulletFile::addStruct(const char* structType,void* data, int len, void* oldPtr, int code) -{ - - bParse::bChunkInd dataChunk; - dataChunk.code = code; - dataChunk.nr = 1; - dataChunk.len = len; - dataChunk.dna_nr = mMemoryDNA->getReverseType(structType); - dataChunk.oldPtr = oldPtr; - - ///Perform structure size validation - short* structInfo= mMemoryDNA->getStruct(dataChunk.dna_nr); - int elemBytes; - elemBytes= mMemoryDNA->getLength(structInfo[0]); -// int elemBytes = mMemoryDNA->getElementSize(structInfo[0],structInfo[1]); - assert(len==elemBytes); - - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)data); - m_chunks.push_back(dataChunk); -} |