Exemple #1
0
//----------------------------------------------------------------------------
void SESound::Link(SEStream& rStream, SEStream::SELink* pLink)
{
    SESpatial::Link(rStream, pLink);

    SEObject* pLinkID = pLink->GetLinkID();
    ModelBound = (SEBoundingVolume*)rStream.GetFromMap(pLinkID);

    pLinkID = pLink->GetLinkID();
    SBuffer = (SESoundBuffer*)rStream.GetFromMap(pLinkID);
}
//----------------------------------------------------------------------------
void SEParticles::Link(SEStream& rStream, SEStream::SELink* pLink)
{
    SETriMesh::Link(rStream, pLink);

    SEObject* pLinkID = pLink->GetLinkID();
    Locations = (SEVector3fArray*)rStream.GetFromMap(pLinkID);

    pLinkID = pLink->GetLinkID();
    Sizes = (SEFloatArray*)rStream.GetFromMap(pLinkID);
}
Exemple #3
0
//----------------------------------------------------------------------------
void SECamera::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;
    
    SEObject::Save(rStream);

    // native data
    rStream.Write(m_Location);
    rStream.Write(m_RVector);
    rStream.Write(m_UVector);
    rStream.Write(m_DVector);
    rStream.Write(m_Frustum[VF_DMIN]);
    rStream.Write(m_Frustum[VF_DMAX]);
    rStream.Write(m_Frustum[VF_UMIN]);
    rStream.Write(m_Frustum[VF_UMAX]);
    rStream.Write(m_Frustum[VF_RMIN]);
    rStream.Write(m_Frustum[VF_RMAX]);
    rStream.Write(m_fPortL);
    rStream.Write(m_fPortR);
    rStream.Write(m_fPortT);
    rStream.Write(m_fPortB);
    rStream.Write(m_fPortN);
    rStream.Write(m_fPortF);

    SE_END_DEBUG_STREAM_SAVE(SECamera);
}
Exemple #4
0
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SECamera::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEObject::Load(rStream, pLink);

    // native data
    rStream.Read(m_Location);
    rStream.Read(m_RVector);
    rStream.Read(m_UVector);
    rStream.Read(m_DVector);
    rStream.Read(m_Frustum[VF_DMIN]);
    rStream.Read(m_Frustum[VF_DMAX]);
    rStream.Read(m_Frustum[VF_UMIN]);
    rStream.Read(m_Frustum[VF_UMAX]);
    rStream.Read(m_Frustum[VF_RMIN]);
    rStream.Read(m_Frustum[VF_RMAX]);
    rStream.Read(m_fPortL);
    rStream.Read(m_fPortR);
    rStream.Read(m_fPortT);
    rStream.Read(m_fPortB);
    rStream.Read(m_fPortN);
    rStream.Read(m_fPortF);

    SE_END_DEBUG_STREAM_LOAD(SECamera);
}
//----------------------------------------------------------------------------
void SEPolyline::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SEGeometry::Save(rStream);

    // native data
    rStream.Write(m_iActiveCount);
    rStream.Write(m_bClosed);
    rStream.Write(m_bContiguous);

    SE_END_DEBUG_STREAM_SAVE(SEPolyline);
}
Exemple #6
0
//----------------------------------------------------------------------------
void SEObject::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    // 获取save时存入的object内存指针,稍后用于link阶段
    SEObject* pLinkID;
    rStream.Read(pLinkID);
    rStream.InsertInMap(pLinkID, pLink);

    // 获取name
    rStream.Read(m_Name);

    SE_END_DEBUG_STREAM_LOAD(SEObject);
}
//----------------------------------------------------------------------------
void SEMultitextureEffect::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SEShaderEffect::Save(rStream);

    // native data
    rStream.Write(m_iTextureCount);
    for( int i = 0; i < m_iTextureCount; i++ )
    {
        rStream.Write(m_aImageName[i]);
    }

    SE_END_DEBUG_STREAM_SAVE(SEMultitextureEffect);
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SEPolyline::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEGeometry::Load(rStream,pLink);

    // native data
    rStream.Read(m_iActiveCount);
    rStream.Read(m_bClosed);
    rStream.Read(m_bContiguous);

    SetGeometryType();

    SE_END_DEBUG_STREAM_LOAD(SEPolyline);
}
Exemple #9
0
//----------------------------------------------------------------------------
void SEObject::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    // RTTI name用于load时的工厂函数表查找
    rStream.Write(std::string(GetType().GetName()));

    // 该内存地址用于load/link时的object unique ID
    rStream.Write((SEObject*)this);

    // 写入name
    rStream.Write(m_Name);

    SE_END_DEBUG_STREAM_SAVE(SEObject);
}
Exemple #10
0
//----------------------------------------------------------------------------
bool SEObject::Register(SEStream& rStream) const
{
    SEObject* pThis = (SEObject*)this;
    // 该object是否已插入到hash表,确保唯一性
    if( rStream.InsertInMap(pThis, 0) )
    {
        // 所有object按照深度优先的顺序,在遍历场景树时被收集,
        // 该object不能重复被收集
        rStream.InsertInOrdered(pThis);

        return true;
    }

    return false;
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SEListener::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEObject::Load(rStream, pLink);

    // native data
    rStream.Read(m_Location);
    rStream.Read(m_RVector);
    rStream.Read(m_UVector);
    rStream.Read(m_DVector);
    rStream.Read(m_fMasterGain);

    SE_END_DEBUG_STREAM_LOAD(SEListener);
}
//----------------------------------------------------------------------------
void SEListener::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;
    
    SEObject::Save(rStream);

    // native data
    rStream.Write(m_Location);
    rStream.Write(m_RVector);
    rStream.Write(m_UVector);
    rStream.Write(m_DVector);
    rStream.Write(m_fMasterGain);

    SE_END_DEBUG_STREAM_SAVE(SEListener);
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SEMultitextureEffect::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEShaderEffect::Load(rStream, pLink);

    // native data
    rStream.Read(m_iTextureCount);
    SetTextureCount(m_iTextureCount);
    for( int i = 0; i < m_iTextureCount; i++ )
    {
        rStream.Read(m_aImageName[i]);
    }

    SE_END_DEBUG_STREAM_LOAD(SEMultitextureEffect);
}
//----------------------------------------------------------------------------
void SESoundBuffer::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SEObject::Save(rStream);

    // link data
    int iWCount = (int)m_Waves.size();
    rStream.Write(iWCount);
    for( int i = 0; i < iWCount; i++ )
    {
        rStream.Write(m_Waves[i]);
    }

    SE_END_DEBUG_STREAM_SAVE(SESoundBuffer);
}
//----------------------------------------------------------------------------
void SEParticles::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SETriMesh::Save(rStream);

    // native data
    rStream.Write(SizeAdjust);
    rStream.Write(m_iActiveCount);

    // link data
    rStream.Write(Locations);
    rStream.Write(Sizes);

    SE_END_DEBUG_STREAM_SAVE(SEParticles);
}
//----------------------------------------------------------------------------
void SEController::Link(SEStream& rStream, SEStream::SELink* pLink)
{
    SEObject::Link(rStream, pLink);

    SEObject* pLinkID = pLink->GetLinkID();
    m_pObject = (SEAdvancedObject*)rStream.GetFromMap(pLinkID);
}
Exemple #17
0
//----------------------------------------------------------------------------
void SEBoxBV::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SEBoundingVolume::Save(rStream);

    // native data
    rStream.Write(m_Box.Center);
    rStream.Write(m_Box.Axis[0]);
    rStream.Write(m_Box.Axis[1]);
    rStream.Write(m_Box.Axis[2]);
    rStream.Write(m_Box.Extent[0]);
    rStream.Write(m_Box.Extent[1]);
    rStream.Write(m_Box.Extent[2]);

    SE_END_DEBUG_STREAM_SAVE(SEBoxBV);
}
Exemple #18
0
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SEBoxBV::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEBoundingVolume::Load(rStream, pLink);

    // native data
    rStream.Read(m_Box.Center);
    rStream.Read(m_Box.Axis[0]);
    rStream.Read(m_Box.Axis[1]);
    rStream.Read(m_Box.Axis[2]);
    rStream.Read(m_Box.Extent[0]);
    rStream.Read(m_Box.Extent[1]);
    rStream.Read(m_Box.Extent[2]);

    SE_END_DEBUG_STREAM_LOAD(SEBoxBV);
}
//----------------------------------------------------------------------------
void SEDescriptorItem::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SEObject::Save(rStream);

    // native data
    rStream.Write(IsArray);
    rStream.Write(m_InstanceName);

    int iCount = (int)m_TypeNames.size();
    rStream.Write(iCount);
    for( int i = 0; i < iCount; i++ )
    {
        rStream.Write(m_TypeNames[i]);
    }

    SE_END_DEBUG_STREAM_SAVE(SEDescriptorItem);
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SESoundBuffer::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEObject::Load(rStream, pLink);

    // link data
    int iWCount;
    rStream.Read(iWCount);
    m_Waves.resize(iWCount);
    for( int i = 0; i < iWCount; i++ )
    {
        SEObject* pObject;
        rStream.Read(pObject);  // m_Waves[i]
        pLink->Add(pObject);
    }

    SE_END_DEBUG_STREAM_LOAD(SESoundBuffer);
}
//----------------------------------------------------------------------------
void SESoundBuffer::Link(SEStream& rStream, SEStream::SELink* pLink)
{
    SEObject::Link(rStream, pLink);

    for( int i = 0; i < (int)m_Waves.size(); i++ )
    {
        SEObject* pLinkID = pLink->GetLinkID();
        m_Waves[i] = (SEWave*)rStream.GetFromMap(pLinkID);
    }
}
Exemple #22
0
//----------------------------------------------------------------------------
// copying
//----------------------------------------------------------------------------
SEObjectPtr SEObject::Copy(bool bUniqueNames) const
{
    // Save the object to a memory buffer.
    SEStream tempSaveStream;
    tempSaveStream.Insert((SEObject*)this);
    char* pBuffer = 0;
    int iBufferSize = 0;
    bool bSuccessful = tempSaveStream.Save(pBuffer, iBufferSize);
    SE_ASSERT( bSuccessful );
    if( !bSuccessful )
    {
        return 0;
    }

    // Load the object from the memory buffer.
    SEStream tempLoadStream;
    bSuccessful = tempLoadStream.Load(pBuffer, iBufferSize);
    SE_ASSERT( bSuccessful );

    if( !bSuccessful )
    {
        return 0;
    }
    SE_DELETE[] pBuffer;

    if( bUniqueNames )
    {
        // Generate unique names.
        for( int i = 0; i < tempLoadStream.GetOrderedCount(); i++ )
        {
            SEObject* pObject = tempLoadStream.GetOrderedObject(i);
            SE_ASSERT( pObject );

            const std::string& rName = pObject->GetName();
            int iLength = (int)rName.length();
            if( iLength > 0 )
            {
                // Object has a name, append a character to make it unique.
                const char* pName = rName.c_str();
                char* acNewName = SE_NEW char[iLength + 2];
                const size_t uiSize = (size_t)(iLength + 2);
                SESystem::SE_Strcpy(acNewName, uiSize, pName);
                acNewName[iLength] = NameAppend;
                acNewName[iLength+1] = 0;
                pObject->SetName(std::string(acNewName));
                SE_DELETE[] acNewName;
            }
        }
    }

    return tempLoadStream.GetObjectAt(0);
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SEDescriptorItem::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEObject::Load(rStream, pLink);

    // native data
    rStream.Read(IsArray);
    rStream.Read(m_InstanceName);

    int iCount;
    rStream.Read(iCount);
    m_TypeNames.resize(iCount);
    for( int i = 0; i < iCount; i++ )
    {
        rStream.Read(m_TypeNames[i]);
    }

    SE_END_DEBUG_STREAM_LOAD(SEDescriptorItem);
}
//----------------------------------------------------------------------------
void SERenderStateBlock::Link(SEStream& rStream, SEStream::SELink* pLink)
{
    SEObject::Link(rStream, pLink);

    SEObject* pLinkID;
    for( int i = 0; i < SEGlobalState::MAX_STATE_TYPE; i++ )
    {
        pLinkID = pLink->GetLinkID();
        States[i] = (SEGlobalState*)rStream.GetFromMap(pLinkID);
    }
}
Exemple #25
0
//----------------------------------------------------------------------------
void SESphereBV::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SEBoundingVolume::Save(rStream);

    // native data
    rStream.Write(m_Sphere.Center);
    rStream.Write(m_Sphere.Radius);

    SE_END_DEBUG_STREAM_SAVE(SESphereBV);
}
Exemple #26
0
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SESphereBV::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEBoundingVolume::Load(rStream, pLink);

    // native data
    rStream.Read(m_Sphere.Center);
    rStream.Read(m_Sphere.Radius);

    SE_END_DEBUG_STREAM_LOAD(SESphereBV);
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SEParticles::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SETriMesh::Load(rStream, pLink);

    // native data
    rStream.Read(SizeAdjust);
    rStream.Read(m_iActiveCount);

    // link data
    SEObject* pObject;

    rStream.Read(pObject);  // Locations
    pLink->Add(pObject);

    rStream.Read(pObject);  // Sizes
    pLink->Add(pObject);

    SE_END_DEBUG_STREAM_LOAD(SEParticles);
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SEController::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEObject::Load(rStream, pLink);

    // native data
    int iRepeat;
    rStream.Read(iRepeat);
    Repeat = (RepeatType)iRepeat;

    rStream.Read(MinTime);
    rStream.Read(MaxTime);
    rStream.Read(Phase);
    rStream.Read(Frequency);
    rStream.Read(Active);
    // m_dLastAppTime is not streamed

    // link data
    SEObject* pObject;
    rStream.Read(pObject);
    pLink->Add(pObject);

    SE_END_DEBUG_STREAM_LOAD(SEController);
}
//----------------------------------------------------------------------------
void SERenderStateBlock::Save(SEStream& rStream) const
{
    SE_BEGIN_DEBUG_STREAM_SAVE;

    SEObject::Save(rStream);

    // link data
    for( int i = 0; i < SEGlobalState::MAX_STATE_TYPE; i++ )
    {
        rStream.Write(States[i]);
    }

    SE_END_DEBUG_STREAM_SAVE(SERenderStateBlock);
}
//----------------------------------------------------------------------------
// streaming
//----------------------------------------------------------------------------
void SERenderStateBlock::Load(SEStream& rStream, SEStream::SELink* pLink)
{
    SE_BEGIN_DEBUG_STREAM_LOAD;

    SEObject::Load(rStream, pLink);

    // link data
    SEObject* pObject;
    for( int i = 0; i < SEGlobalState::MAX_STATE_TYPE; i++ )
    {
        rStream.Read(pObject);  // States[i]
        pLink->Add(pObject);
    }

    SE_END_DEBUG_STREAM_LOAD(SERenderStateBlock);
}