//--------------------------------------------------------------------- void GpuProgramManager::saveMicrocodeCache( DataStreamPtr stream ) const { if (!stream->isWriteable()) { OGRE_EXCEPT(Exception::ERR_CANNOT_WRITE_TO_FILE, "Unable to write to stream " + stream->getName(), "GpuProgramManager::saveMicrocodeCache"); } // write the size of the array size_t sizeOfArray = mMicrocodeCache.size(); stream->write(&sizeOfArray, sizeof(size_t)); // loop the array and save it MicrocodeMap::const_iterator iter = mMicrocodeCache.begin(); MicrocodeMap::const_iterator iterE = mMicrocodeCache.end(); for ( ; iter != iterE ; iter++ ) { // saves the name of the shader { const String & nameOfShader = iter->first; size_t stringLength = nameOfShader.size(); stream->write(&stringLength, sizeof(size_t)); stream->write(&nameOfShader[0], stringLength); } // saves the microcode { const Microcode & microcodeOfShader = iter->second; size_t microcodeLength = microcodeOfShader->size(); stream->write(µcodeLength, sizeof(size_t)); stream->write(microcodeOfShader->getPtr(), microcodeLength); } } }
//--------------------------------------------------------------------- void SkeletonSerializer::exportSkeleton(const Skeleton* pSkeleton, DataStreamPtr stream, SkeletonVersion ver, Endian endianMode) { setWorkingVersion(ver); // Decide on endian mode determineEndianness(endianMode); String msg; mStream = stream; if (!stream->isWriteable()) { OGRE_EXCEPT(Exception::ERR_CANNOT_WRITE_TO_FILE, "Unable to write to stream " + stream->getName(), "SkeletonSerializer::exportSkeleton"); } writeFileHeader(); // Write main skeleton data LogManager::getSingleton().logMessage("Exporting bones.."); writeSkeleton(pSkeleton, ver); LogManager::getSingleton().logMessage("Bones exported."); // Write all animations unsigned short numAnims = pSkeleton->getNumAnimations(); LogManager::getSingleton().stream() << "Exporting animations, count=" << numAnims; for (unsigned short i = 0; i < numAnims; ++i) { Animation* pAnim = pSkeleton->getAnimation(i); LogManager::getSingleton().stream() << "Exporting animation: " << pAnim->getName(); writeAnimation(pSkeleton, pAnim, ver); LogManager::getSingleton().logMessage("Animation exported."); } // Write links Skeleton::LinkedSkeletonAnimSourceIterator linkIt = pSkeleton->getLinkedSkeletonAnimationSourceIterator(); while(linkIt.hasMoreElements()) { const LinkedSkeletonAnimationSource& link = linkIt.getNext(); writeSkeletonAnimationLink(pSkeleton, link); } }