//----------------------------------------------------------------------------
void KeyframeController::Save (OutStream& target) const
{
    WM5_BEGIN_DEBUG_STREAM_SAVE(target);

    TransformController::Save(target);

    target.Write(mNumCommonTimes);
    if (mNumCommonTimes > 0)
    {
        target.WriteN(mNumCommonTimes, mCommonTimes);
        target.WriteAggregateW(mNumTranslations, mTranslations);
        target.WriteAggregateW(mNumRotations, mRotations);
        target.WriteW(mNumScales, mScales);
    }
    else
    {
        target.WriteW(mNumTranslations, mTranslationTimes);
        target.WriteAggregateN(mNumTranslations, mTranslations);
        target.WriteW(mNumRotations, mRotationTimes);
        target.WriteAggregateN(mNumRotations, mRotations);
        target.WriteW(mNumScales, mScaleTimes);
        target.WriteN(mNumScales, mScales);
    }

    WM5_END_DEBUG_STREAM_SAVE(KeyframeController, target);
}
//----------------------------------------------------------------------------
void RawTerrainPage::Save (OutStream& target) const
{
	PX2_BEGIN_DEBUG_STREAM_SAVE(target);

	TriMesh::Save(target);

	target.Write(mSize);
	int numVertices = mSize*mSize;
	target.WriteN(numVertices, mHeights);
	target.WriteAggregate(mOrigin);
	target.Write(mSpacing);

	target.WritePointer(mMaterialInstance);
	target.WritePointer(mTextureDefault);
	target.WritePointer(mTexture0);
	target.WritePointer(mTextureAlpha);
	target.WritePointer(mTexture1);
	target.WritePointer(mTexture2);
	target.WritePointer(mTexture3);
	target.WritePointer(mTexture4);
	target.WriteAggregate(mUV01);
	target.WriteAggregate(mUV23);
	target.WriteAggregate(mUV4);
	target.WritePointer(mUV01Float);
	target.WritePointer(mUV23Float);
	target.WritePointer(mUV4Float);

	PX2_END_DEBUG_STREAM_SAVE(RawTerrainPage, target);
}
Beispiel #3
0
//----------------------------------------------------------------------------
void DlodNode::Save (OutStream& target) const
{
    PX2_BEGIN_DEBUG_STREAM_SAVE(target);

    SwitchNode::Save(target);

    target.WriteAggregate(mModelLodCenter);
    target.WriteW(mNumLevelsOfDetail, mModelMinDist);
    target.WriteN(mNumLevelsOfDetail, mModelMaxDist);
    target.WriteN(mNumLevelsOfDetail, mWorldMinDist);
    target.WriteN(mNumLevelsOfDetail, mWorldMaxDist);

	// 模型世界中心为实时计算,不需要存储。

    PX2_END_DEBUG_STREAM_SAVE(DlodNode, target);
}
//----------------------------------------------------------------------------
void MorphController::Save (OutStream& target) const
{
    WM5_BEGIN_DEBUG_STREAM_SAVE(target);

    Controller::Save(target);

    target.Write(mNumVertices);
    target.Write(mNumTargets);
    target.Write(mNumKeys);

    int numTotalVertices = mNumVertices*mNumTargets;
    target.WriteAggregateN(numTotalVertices, mVertices[0]);

    target.WriteN(mNumKeys, mTimes);

    int numTotalWeights = mNumKeys*(mNumTargets - 1);
    target.WriteN(numTotalWeights, mWeights[0]);

    WM5_END_DEBUG_STREAM_SAVE(MorphController, target);
}
Beispiel #5
0
//----------------------------------------------------------------------------
void Shader::Save (OutStream& target) const
{
	WM5_BEGIN_DEBUG_STREAM_SAVE(target);

	Object::Save(target);

	target.WriteStringW(mNumInputs, mInputName);
	target.WriteEnumN(mNumInputs, mInputType);
	target.WriteEnumN(mNumInputs, mInputSemantic);
	target.WriteStringW(mNumOutputs, mOutputName);
	target.WriteEnumN(mNumOutputs, mOutputType);
	target.WriteEnumN(mNumOutputs, mOutputSemantic);
	target.WriteStringW(mNumConstants, mConstantName);
	target.WriteN(mNumConstants, mNumRegistersUsed);
	target.WriteStringW(mNumSamplers, mSamplerName);
	target.WriteEnumN(mNumSamplers, mSamplerType);
	target.WriteEnumN(mNumSamplers, mFilter);
	target.WriteEnumN(mNumSamplers, mCoordinate[0]);
	target.WriteEnumN(mNumSamplers, mCoordinate[1]);
	target.WriteEnumN(mNumSamplers, mCoordinate[2]);
	target.WriteN(mNumSamplers, mLodBias);
	target.WriteN(mNumSamplers, mAnisotropy);
	target.WriteAggregateN(mNumSamplers, mBorderColor);

	// On load, test this against MAX_PROFILES just in case a user increases
	// MAX_PROFILES and tries to load old data sets.
	target.Write((int)MAX_PROFILES);
	target.WriteBool(mProfileOwner);
	if (mProfileOwner)
	{
		for (int i = 0; i < MAX_PROFILES; ++i)
		{
			target.WriteN(mNumConstants, mBaseRegister[i]);
			target.WriteN(mNumSamplers, mTextureUnit[i]);
			target.WriteString(*mProgram[i]);
		}
	}

	WM5_END_DEBUG_STREAM_SAVE(Shader, target);
}
//----------------------------------------------------------------------------
void SkinController::Save (OutStream& target) const
{
	PX2_BEGIN_DEBUG_STREAM_SAVE(target);

	Controller::Save(target);

	target.Write(mNumVertices);
	target.Write(mNumBones);

	int numWeightsOffsets = mNumVertices*mNumBones;
	target.WriteN(numWeightsOffsets, mWeights[0]);
	target.WriteAggregateN(numWeightsOffsets, mOffsets[0]);

	target.WritePointerN(mNumBones, mBones);

	PX2_END_DEBUG_STREAM_SAVE(SkinController, target);
}
//----------------------------------------------------------------------------
void CollapseRecordArray::Save (OutStream& target) const
{
    WM5_BEGIN_DEBUG_STREAM_SAVE(target);

    Object::Save(target);

    target.Write(mNumRecords);
    for (int i = 0; i < mNumRecords; ++i)
    {
        target.Write(mRecords[i].VKeep);
        target.Write(mRecords[i].VThrow);
        target.Write(mRecords[i].NumVertices);
        target.Write(mRecords[i].NumTriangles);
        target.Write(mRecords[i].NumIndices);
        if (mRecords[i].Indices)
        {
            target.WriteN(mRecords[i].NumIndices, mRecords[i].Indices);
        }
    }

    WM5_END_DEBUG_STREAM_SAVE(CollapseRecordArray, target);
}
//----------------------------------------------------------------------------
void TerrainPage::Save (OutStream& target) const
{
	PX2_BEGIN_DEBUG_STREAM_SAVE(target);

	TriMesh::Save(target);
	PX2_VERSION_SAVE(target);

	target.Write(mSize);
	int numVertices = mSize*mSize;
	target.WriteN(numVertices, mHeights);
	target.WriteAggregate(mOrigin);
	target.Write(mSpacing);

	int numJunglers = (int)mJunglers.size();
	target.Write(numJunglers);
	for (int i=0; i<numJunglers; i++)
	{
		target.WritePointer(mJunglers[i]);
	}

	PX2_END_DEBUG_STREAM_SAVE(TerrainPage, target);
}
//----------------------------------------------------------------------------
void RevolutionSurface::Save (OutStream& target) const
{
    WM5_BEGIN_DEBUG_STREAM_SAVE(target);

    TriMesh::Save(target);

    target.Write(mXCenter);
    target.WriteEnum(mTopology);
    target.Write(mNumCurveSamples);
    target.Write(mNumRadialSamples);
    target.WriteN(mNumRadialSamples + 1, mSin);
    target.WriteN(mNumRadialSamples + 1, mCos);
    target.WriteBool(mSampleByArcLength);

    // TODO.  The class Curve2 is abstract and does not know about the data
    // representation for the derived-class object that is passed to the
    // RevolutionSurface constructor.  Because of this, any loaded
    // RevolutionSurface object will require the application to manually set
    // the curve via the Curve() member.
    //
    // Streaming support should be added to the curve classes.

    WM5_END_DEBUG_STREAM_SAVE(RevolutionSurface, target);
}
Beispiel #10
0
//----------------------------------------------------------------------------
void Texture::Save (OutStream& target) const
{
    WM5_BEGIN_DEBUG_STREAM_SAVE(target);

    Object::Save(target);

    target.WriteEnum(mFormat);
    target.WriteEnum(mType);
    target.WriteEnum(mUsage);
    target.Write(mNumLevels);
    target.Write(mNumDimensions);
    target.WriteN(MM_MAX_MIPMAP_LEVELS, mDimension[0]);
    target.WriteN(MM_MAX_MIPMAP_LEVELS, mDimension[1]);
    target.WriteN(MM_MAX_MIPMAP_LEVELS, mDimension[2]);
    target.WriteN(MM_MAX_MIPMAP_LEVELS, mNumLevelBytes);
    target.Write(mNumTotalBytes);
    target.WriteN(MM_MAX_MIPMAP_LEVELS, mLevelOffsets);
    target.WriteN(MAX_USER_FIELDS, mUserField);
    target.WriteN(mNumTotalBytes, mData);

    WM5_END_DEBUG_STREAM_SAVE(Texture, target);
}