public override void Read(AssetStream stream) { base.Read(stream); if (IsReadLODData(stream.Version)) { m_LODData = stream.ReadArray <LOD>(); } if (IsReadIndicesUsage(stream.Version)) { Use16bitIndices = stream.ReadInt32() > 0; } if (IsReadIndexBuffer(stream.Version)) { if (IsReadIndexBufferFirst(stream.Version)) { m_indexBuffer = stream.ReadByteArray(); stream.AlignStream(AlignType.Align4); } } if (IsReadSubMeshes(stream.Version)) { m_subMeshes = stream.ReadArray <SubMesh>(); } if (IsReadBlendShapes(stream.Version)) { Shapes.Read(stream); } if (IsReadBindPosesFirst(stream.Version)) { m_bindPoses = stream.ReadArray <Matrix4x4f>(); } if (IsReadBoneNameHashes(stream.Version)) { m_boneNameHashes = stream.ReadUInt32Array(); RootBoneNameHash = stream.ReadUInt32(); } if (IsReadMeshCompression(stream.Version)) { MeshCompression = stream.ReadByte(); } if (IsReadStreamCompression(stream.Version)) { StreamCompression = stream.ReadByte(); } if (IsReadIsReadable(stream.Version)) { IsReadable = stream.ReadBoolean(); KeepVertices = stream.ReadBoolean(); KeepIndices = stream.ReadBoolean(); } if (IsAlign(stream.Version)) { stream.AlignStream(AlignType.Align4); } if (IsReadIndexFormat(stream.Version)) { if (IsReadIndexFormatCondition(stream.Version)) { if (MeshCompression == 0) { IndexFormat = stream.ReadInt32(); } } else { IndexFormat = stream.ReadInt32(); } } if (IsReadIndexBuffer(stream.Version)) { if (!IsReadIndexBufferFirst(stream.Version)) { m_indexBuffer = stream.ReadByteArray(); stream.AlignStream(AlignType.Align4); } } if (IsReadVertices(stream.Version)) { if (IsReadVertexData(stream.Version)) { if (MeshCompression != 0) { m_vertices = stream.ReadArray <Vector3f>(); } } else { m_vertices = stream.ReadArray <Vector3f>(); } } if (IsReadSkin(stream.Version)) { m_skin = stream.ReadArray <BoneWeights4>(); } if (IsReadBindPoses(stream.Version)) { if (!IsReadBindPosesFirst(stream.Version)) { m_bindPoses = stream.ReadArray <Matrix4x4f>(); } } if (IsReadVertexData(stream.Version)) { if (IsReadOnlyVertexData(stream.Version)) { VertexData.Read(stream); } else { if (MeshCompression == 0) { VertexData.Read(stream); } else { m_UV = stream.ReadArray <Vector2f>(); m_UV1 = stream.ReadArray <Vector2f>(); m_tangents = stream.ReadArray <Vector4f>(); m_normals = stream.ReadArray <Vector3f>(); m_colors = stream.ReadArray <ColorRGBA32>(); } } } else { m_UV = stream.ReadArray <Vector2f>(); if (IsReadUV1(stream.Version)) { m_UV1 = stream.ReadArray <Vector2f>(); } if (IsReadTangentSpace(stream.Version)) { m_tangentSpace = stream.ReadArray <Tangent>(); } else { m_tangents = stream.ReadArray <Vector4f>(); m_normals = stream.ReadArray <Vector3f>(); } } if (IsReadAlign(stream.Version)) { stream.AlignStream(AlignType.Align4); } if (IsReadCompressedMesh(stream.Version)) { CompressedMesh.Read(stream); } LocalAABB.Read(stream); if (IsReadColors(stream.Version)) { if (!IsReadVertexData(stream.Version)) { m_colors = stream.ReadArray <ColorRGBA32>(); } } if (IsReadCollisionTriangles(stream.Version)) { m_collisionTriangles = stream.ReadUInt32Array(); CollisionVertexCount = stream.ReadInt32(); } if (IsReadMeshUsageFlags(stream.Version)) { MeshUsageFlags = stream.ReadInt32(); } if (IsReadCollision(stream.Version)) { CollisionData.Read(stream); } if (IsReadMeshMetrics(stream.Version)) { m_meshMetrics = new float[2]; m_meshMetrics[0] = stream.ReadSingle(); m_meshMetrics[1] = stream.ReadSingle(); } }
public override void Read(EndianStream stream) { base.Read(stream); if (IsReadIndicesUsage) { IsUse16bitIndices = stream.ReadBoolean(); stream.AlignStream(AlignType.Align4); } if (IsIndexBufferFirst) { m_indexBuffer = stream.ReadByteArray(); stream.AlignStream(AlignType.Align4); } m_subMeshes = stream.ReadArray(() => new SubMesh(AssetsFile)); if (IsReadBlendShapes) { Shapes.Read(stream); if (IsBindPosesFirst) { m_bindPoses = stream.ReadArray <Matrix4x4f>(); m_boneNameHashes = stream.ReadUInt32Array(); RootBoneNameHash = stream.ReadUInt32(); } } if (!IsIndexBufferFirst) { MeshCompression = stream.ReadByte(); if (IsReadBoolFlags) { if (IsReadStreamCompression) { StreamCompression = stream.ReadByte(); } IsReadable = stream.ReadBoolean(); KeepVertices = stream.ReadBoolean(); KeepIndices = stream.ReadBoolean(); } stream.AlignStream(AlignType.Align4); if (IsReadIndexFormat) { if (MeshCompression == 0) { IndexFormat = stream.ReadInt32(); } } m_indexBuffer = stream.ReadByteArray(); stream.AlignStream(AlignType.Align4); } if (IsReadVertices) { m_vertices = stream.ReadArray <Vector3f>(); m_bindPoses = stream.ReadArray <Matrix4x4f>(); #warning TODO: throw new System.NotImplementedException(); } else { m_skin = stream.ReadArray <BoneWeights4>(); stream.AlignStream(AlignType.Align4); if (!IsBindPosesFirst) { m_bindPoses = stream.ReadArray <Matrix4x4f>(); } VertexData = new VertexData(AssetsFile, MeshCompression); VertexData.Read(stream); CompressedMesh.Read(stream); if (IsReadLocalAABB) { LocalAABB.Read(stream); } MeshUsageFlags = stream.ReadInt32(); if (IsReadCollision) { CollisionData.Read(stream); } } }
public override void Read(AssetReader reader) { base.Read(reader); if (HasLODData(reader.Version)) { LODData = reader.ReadAssetArray <LOD>(); } else { if (HasUse16bitIndices(reader.Version)) { Use16BitIndices = reader.ReadUInt32(); } if (IsIndexBufferFirst(reader.Version)) { IndexBuffer = reader.ReadByteArray(); reader.AlignStream(AlignType.Align4); } SubMeshes = reader.ReadAssetArray <SubMesh>(); } if (HasBlendShapes(reader.Version)) { if (HasBlendChannels(reader.Version)) { Shapes.Read(reader); } else { BlendShapes = reader.ReadAssetArray <BlendShape>(); reader.AlignStream(AlignType.Align4); ShapeVertices = reader.ReadAssetArray <BlendShapeVertex>(); } } if (HasBindPose(reader.Version)) { if (IsBindPoseFirst(reader.Version)) { BindPose = reader.ReadAssetArray <Matrix4x4f>(); } } if (HasBoneNameHashes(reader.Version)) { BoneNameHashes = reader.ReadUInt32Array(); RootBoneNameHash = reader.ReadUInt32(); } if (HasBonesAABB(reader.Version)) { BonesAABB = reader.ReadAssetArray <MinMaxAABB>(); VariableBoneCountWeights.Read(reader); } if (HasMeshCompression(reader.Version)) { MeshCompression = (MeshCompression)reader.ReadByte(); } if (HasStreamCompression(reader.Version)) { StreamCompression = reader.ReadByte(); } if (HasIsReadable(reader.Version)) { IsReadable = reader.ReadBoolean(); KeepVertices = reader.ReadBoolean(); KeepIndices = reader.ReadBoolean(); } if (IsAlignFlags(reader.Version)) { reader.AlignStream(AlignType.Align4); } if (HasIndexFormat(reader.Version)) { if (IsIndexFormatCondition(reader.Version)) { if (MeshCompression == MeshCompression.Off) { IndexFormat = (IndexFormat)reader.ReadInt32(); } } else { IndexFormat = (IndexFormat)reader.ReadInt32(); } } if (!HasLODData(reader.Version)) { if (!IsIndexBufferFirst(reader.Version)) { IndexBuffer = reader.ReadByteArray(); reader.AlignStream(AlignType.Align4); } } if (HasVertexData(reader.Version)) { if (!IsOnlyVertexData(reader.Version)) { if (MeshCompression != MeshCompression.Off) { Vertices = reader.ReadAssetArray <Vector3f>(); } } } else { Vertices = reader.ReadAssetArray <Vector3f>(); } if (HasSkin(reader.Version)) { Skin = reader.ReadAssetArray <BoneWeights4>(); } if (HasBindPose(reader.Version)) { if (!IsBindPoseFirst(reader.Version)) { BindPose = reader.ReadAssetArray <Matrix4x4f>(); } } if (HasVertexData(reader.Version)) { if (IsOnlyVertexData(reader.Version)) { VertexData.Read(reader); } else { if (MeshCompression == MeshCompression.Off) { VertexData.Read(reader); } else { UV = reader.ReadAssetArray <Vector2f>(); UV1 = reader.ReadAssetArray <Vector2f>(); Tangents = reader.ReadAssetArray <Vector4f>(); Normals = reader.ReadAssetArray <Vector3f>(); Colors = reader.ReadAssetArray <ColorRGBA32>(); } } } else { UV = reader.ReadAssetArray <Vector2f>(); if (HasUV1(reader.Version)) { UV1 = reader.ReadAssetArray <Vector2f>(); } if (HasTangentSpace(reader.Version)) { TangentSpace = reader.ReadAssetArray <Tangent>(); } else { Tangents = reader.ReadAssetArray <Vector4f>(); Normals = reader.ReadAssetArray <Vector3f>(); } } if (IsAlignVertex(reader.Version)) { reader.AlignStream(AlignType.Align4); } if (HasCompressedMesh(reader.Version)) { CompressedMesh.Read(reader); } LocalAABB.Read(reader); if (!HasVertexData(reader.Version)) { Colors = reader.ReadAssetArray <ColorRGBA32>(); } if (HasCollisionTriangles(reader.Version)) { CollisionTriangles = reader.ReadUInt32Array(); CollisionVertexCount = reader.ReadInt32(); } if (HasMeshUsageFlags(reader.Version)) { MeshUsageFlags = reader.ReadInt32(); } if (HasCollision(reader.Version)) { CollisionData.Read(reader); } if (HasMeshMetrics(reader.Version)) { MeshMetrics = new float[2]; MeshMetrics[0] = reader.ReadSingle(); MeshMetrics[1] = reader.ReadSingle(); } #if UNIVERSAL if (HasMeshOptimization(reader.Version, reader.Flags)) { if (IsMeshOptimizationFlags(reader.Version)) { MeshOptimizationFlags = (MeshOptimizationFlags)reader.ReadInt32(); } else { MeshOptimized = reader.ReadBoolean(); } } #endif if (HasStreamData(reader.Version)) { reader.AlignStream(AlignType.Align4); StreamData.Read(reader); } }
public override void Read(AssetReader reader) { base.Read(reader); if (IsReadLODData(reader.Version)) { m_LODData = reader.ReadAssetArray <LOD>(); } if (IsReadUse16bitIndices(reader.Version)) { Use16bitIndices = reader.ReadInt32() > 0; } if (IsReadIndexBuffer(reader.Version)) { if (IsReadIndexBufferFirst(reader.Version)) { m_indexBuffer = reader.ReadByteArray(); reader.AlignStream(AlignType.Align4); } } if (IsReadSubMeshes(reader.Version)) { m_subMeshes = reader.ReadAssetArray <SubMesh>(); } if (IsReadBlendShapes(reader.Version)) { Shapes.Read(reader); } if (IsReadBindPosesFirst(reader.Version)) { m_bindPoses = reader.ReadAssetArray <Matrix4x4f>(); } if (IsReadBoneNameHashes(reader.Version)) { m_boneNameHashes = reader.ReadUInt32Array(); RootBoneNameHash = reader.ReadUInt32(); } if (IsReadBonesAABB(reader.Version)) { m_bonesAABB = reader.ReadAssetArray <MinMaxAABB>(); VariableBoneCountWeights.Read(reader); } if (IsReadMeshCompression(reader.Version)) { MeshCompression = (MeshCompression)reader.ReadByte(); } if (IsReadStreamCompression(reader.Version)) { StreamCompression = reader.ReadByte(); } if (IsReadIsReadable(reader.Version)) { IsReadable = reader.ReadBoolean(); KeepVertices = reader.ReadBoolean(); KeepIndices = reader.ReadBoolean(); } if (IsAlign(reader.Version)) { reader.AlignStream(AlignType.Align4); } if (IsReadIndexFormat(reader.Version)) { if (IsReadIndexFormatCondition(reader.Version)) { if (MeshCompression == 0) { IndexFormat = (IndexFormat)reader.ReadInt32(); } } else { IndexFormat = (IndexFormat)reader.ReadInt32(); } } if (IsReadIndexBuffer(reader.Version)) { if (!IsReadIndexBufferFirst(reader.Version)) { m_indexBuffer = reader.ReadByteArray(); reader.AlignStream(AlignType.Align4); } } if (IsReadVertices(reader.Version)) { if (IsReadVertexData(reader.Version)) { if (MeshCompression != 0) { m_vertices = reader.ReadAssetArray <Vector3f>(); } } else { m_vertices = reader.ReadAssetArray <Vector3f>(); } } if (IsReadSkin(reader.Version)) { m_skin = reader.ReadAssetArray <BoneWeights4>(); } if (IsReadBindPoses(reader.Version)) { if (!IsReadBindPosesFirst(reader.Version)) { m_bindPoses = reader.ReadAssetArray <Matrix4x4f>(); } } if (IsReadVertexData(reader.Version)) { if (IsReadOnlyVertexData(reader.Version)) { VertexData.Read(reader); } else { if (MeshCompression == 0) { VertexData.Read(reader); } else { m_UV = reader.ReadAssetArray <Vector2f>(); m_UV1 = reader.ReadAssetArray <Vector2f>(); m_tangents = reader.ReadAssetArray <Vector4f>(); m_normals = reader.ReadAssetArray <Vector3f>(); m_colors = reader.ReadAssetArray <ColorRGBA32>(); } } } else { m_UV = reader.ReadAssetArray <Vector2f>(); if (IsReadUV1(reader.Version)) { m_UV1 = reader.ReadAssetArray <Vector2f>(); } if (IsReadTangentSpace(reader.Version)) { m_tangentSpace = reader.ReadAssetArray <Tangent>(); } else { m_tangents = reader.ReadAssetArray <Vector4f>(); m_normals = reader.ReadAssetArray <Vector3f>(); } } if (IsReadAlign(reader.Version)) { reader.AlignStream(AlignType.Align4); } if (IsReadCompressedMesh(reader.Version)) { CompressedMesh.Read(reader); } LocalAABB.Read(reader); if (IsReadColors(reader.Version)) { if (!IsReadVertexData(reader.Version)) { m_colors = reader.ReadAssetArray <ColorRGBA32>(); } } if (IsReadCollisionTriangles(reader.Version)) { m_collisionTriangles = reader.ReadUInt32Array(); CollisionVertexCount = reader.ReadInt32(); } if (IsReadMeshUsageFlags(reader.Version)) { MeshUsageFlags = reader.ReadInt32(); } if (IsReadCollision(reader.Version)) { CollisionData.Read(reader); } if (IsReadMeshMetrics(reader.Version)) { m_meshMetrics = new float[2]; m_meshMetrics[0] = reader.ReadSingle(); m_meshMetrics[1] = reader.ReadSingle(); } #if UNIVERSAL if (IsReadMeshOptimized(reader.Version, reader.Flags)) { MeshOptimizationFlags = reader.ReadBoolean() ? MeshOptimizationFlags.Everything : 0; } else if (IsReadMeshOptimizationFlags(reader.Version, reader.Flags)) { MeshOptimizationFlags = (MeshOptimizationFlags)reader.ReadInt32(); } #endif if (IsReadStreamData(reader.Version)) { reader.AlignStream(AlignType.Align4); StreamData.Read(reader); } }