//---------------------------------------------------------------------------- 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); }
//---------------------------------------------------------------------------- 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); }
//---------------------------------------------------------------------------- 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); }
//---------------------------------------------------------------------------- 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); }