Пример #1
0
	//---------------------------------------------------------------------
	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.");
        }

    }
Пример #3
0
	    //---------------------------------------------------------------------
	    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() );
    }   
}