//--------------------------------------------------------------------- String Image::getFileExtFromMagic(DataStreamPtr stream) { // read the first 32 bytes or file size, if less size_t magicLen = std::min(stream->size(), (size_t)32); char magicBuf[32]; stream->read(magicBuf, magicLen); // return to start stream->seek(0); Codec* pCodec = Codec::getCodec(magicBuf, magicLen); if(pCodec) return pCodec->getType(); else return StringUtil::BLANK; }
//--------------------------------------------------------------------- void MeshSerializer::importMesh(DataStreamPtr& stream, Mesh* pDest) { determineEndianness(stream); // Read header and determine the version unsigned short headerID; // Read header ID readShorts(stream, &headerID, 1); if (headerID != HEADER_CHUNK_ID) { OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, "File header not found", "MeshSerializer::importMesh"); } // Read version String ver = readString(stream); // Jump back to start stream->seek(0); // Find the implementation to use MeshSerializerImpl* impl = 0; for (MeshVersionDataList::iterator i = mVersionData.begin(); i != mVersionData.end(); ++i) { if ((*i)->versionString == ver) { impl = (*i)->impl; break; } } if (!impl) OGRE_EXCEPT(Exception::ERR_INTERNAL_ERROR, "Cannot find serializer implementation for " "mesh version " + ver, "MeshSerializer::importMesh"); // Call implementation impl->importMesh(stream, pDest, mListener); // Warn on old version of mesh if (ver != mVersionData[0]->versionString) { LogManager::getSingleton().logMessage("WARNING: " + pDest->getName() + " is an older format (" + ver + "); you should upgrade it as soon as possible" + " using the OgreMeshUpgrade tool."); } }
//--------------------------------------------------------------------- void ParseOgre::importMesh(DataStreamPtr& stream, OgreMesh* pDest) { determineEndianness(stream); // Read header and determine the version unsigned short headerID;// = *(U16*)p; // Read header ID //stream.g readShorts(stream, &headerID, 1); //Read(&headerID,sizeof(headerID),1,pData,uiPos); if (headerID != HEADER_CHUNK_ID) { // OGRE_EXCEPT(0, "File header not found", // "ParseOgre::importMesh"); } // Read version AString ver = readString(stream); // AChar version[MAX_NAME]; // ReadStr(pData,version,uiPos); // ver = version; // Jump back to start stream->seek(0); // Find the implementation to use ParseOgreImplMap::iterator impl = mImplementations.find(ver); if (impl == mImplementations.end()) { // OGRE_EXCEPT(0, "Cannot find serializer implementation for " // "current version " + ver, "ParseOgre::importMesh"); } // Call implementation impl->second->importMesh(stream, pDest, mListener); // Warn on old version of mesh if (ver != msCurrentVersion) { // LogManager("WARNING: " + pDest->getName() + // " is an older format (" + ver + "); you should upgrade it as soon as possible" + // " using the OgreMeshUpgrade tool."); } }
bool FileInterfaceOgre3D::Seek(Rocket::Core::FileHandle file, long offset, int origin) { if (!file) return false; DataStreamPtr stream = *(DataStreamPtr*)(file); long pos = 0; size_t size = stream->size(); if (origin == SEEK_CUR) pos = stream->tell() + offset; else if (origin == SEEK_END) pos = size + offset; else pos = offset; if (pos < 0 || pos > (long)size) return false; stream->seek((size_t)pos); return true; }
/** * @author JoSch * @date 07-12-2005 */ void Fmod3SoundSample::load() throw (RuntimeException) { getSoundResource()->load(); DataStreamPtr stream = getSoundResource()->getDataStream(); stream->seek(0); int len = stream->size(); char *data = new char[len]; stream->read(data, len); unsigned int mode = FSOUND_LOADMEMORY; if (is3d()) { mode |= FSOUND_HW3D | FSOUND_FORCEMONO; } else { mode |= FSOUND_HW2D; } if (isLooping()) { mode |= FSOUND_LOOP_NORMAL; } else { mode |= FSOUND_LOOP_OFF; } mSample = FSOUND_Sample_Load(FSOUND_FREE, data, mode, 0, len); if (mSample == 0 && !is3d() ) { mode |= FSOUND_FORCEMONO; mSample = FSOUND_Sample_Load(FSOUND_FREE, data, mode, 0, len); } delete[] data; if( mSample == NULL ) { int err = FSOUND_GetError(); Throw( RuntimeException, "Fmod Error:" + Ogre::StringConverter::toString(err) + " while loading " + getName() ); } }