public override void Save(SaveContext saveContext) { var utility = saveContext.Utility; base.Save(saveContext); utility.Write(Flags); saveContext.WritePointerPlaceholder(BoundingBox); PositionOffset.Write(utility); saveContext.WriteObjectListPointerPlaceholder(SubMeshes); utility.Write(BaseAddress); saveContext.WriteObjectListPointerPlaceholder(VertexBuffers); saveContext.WritePointerPlaceholder(BlendShape); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(SubMeshes); saveContext.SaveAndMarkReference(VertexBuffers); saveContext.SaveAndMarkReference(BoundingBox); SubMeshes.SaveList(saveContext); VertexBuffers.SaveList(saveContext); saveContext.SaveAndMarkReference(BlendShape); }
public void Save(SaveContext saveContext) { var utility = saveContext.Utility; CGFXDebug.SaveStart(this, saveContext); utility.Write(TypeId); utility.Write(DynamicAllocator); // Texture Reference saveContext.WritePointerPlaceholder(TextureReference); // Sampler saveContext.WritePointerPlaceholder(TextureSampler); utility.Write(Commands); utility.Write(CommandsLength); // Seems to be length of the aforementioned "Commands"? ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(TextureReference); saveContext.SaveAndMarkReference(TextureSampler); }
public void Save(SaveContext saveContext) { var utility = saveContext.Utility; CGFXDebug.SaveStart(this, saveContext); // Bone Indices if (BoneReferences != null) { BoneIndices = BoneReferences.Select(b => (uint)b.Index).ToList(); // Rebuild from referenced objects } saveContext.WriteValueListPointerPlaceholder(BoneIndices); // Skinning utility.Write((uint)Skinning); // Faces saveContext.WriteObjectListPointerPlaceholder(Faces); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(BoneIndices); saveContext.SaveAndMarkReference(Faces); Faces.SaveList(saveContext); }
public override void Save(SaveContext saveContext) { var utility = saveContext.Utility; CGFXDebug.SaveStart(this, saveContext); utility.Write(TypeId); utility.Write(Flags); saveContext.StringTable.EnqueueAndWriteTempRel(Name); utility.Write(MemberType); saveContext.WriteDICTPointerPlaceholder(Elements); utility.Write(BlendOperationTypes.Length); utility.Write(BlendOperationTypes); utility.Write((uint)EvaluationTiming); utility.Write(Unknown); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(Elements); Elements?.SaveEntries(saveContext); }
public override void Save(SaveContext saveContext) { base.Save(saveContext); var utility = saveContext.Utility; saveContext.WriteObjectListPointerPlaceholder(Meshes); // Materials saveContext.WriteDICTPointerPlaceholder(ModelMaterials); // Shapes saveContext.WriteObjectListPointerPlaceholder(Shapes); // Mesh Node Visibilities saveContext.WriteObjectListPointerPlaceholder(MeshNodeVisibilities); utility.Write(Flags); utility.Write((uint)FaceCulling); utility.Write(LayerId); // Load a Skeleton if this model has one if (HasSkeleton) { saveContext.WritePointerPlaceholder(Skeleton); } ///////////////////////////// // Begin saving dependent data // Save Lists saveContext.SaveAndMarkReference(Meshes); saveContext.SaveAndMarkReference(Shapes); saveContext.SaveAndMarkReference(MeshNodeVisibilities); // I'm not SURE this is where this goes (no test data at the moment I'm writing this) but all lists seem to follow here // Save DICT headers saveContext.SaveAndMarkReference(MetaDatas); saveContext.SaveAndMarkReference(AnimGroup); saveContext.SaveAndMarkReference(ModelMaterials); // Now for other interior data... MetaDatas?.SaveEntries(saveContext); AnimGroup?.SaveEntries(saveContext); Meshes.SaveList(saveContext); ModelMaterials?.SaveEntries(saveContext); Shapes.SaveList(saveContext); MeshNodeVisibilities.SaveList(saveContext); if (HasSkeleton) { saveContext.SaveAndMarkReference(Skeleton); } }
public void Save(SaveContext saveContext) { var utility = saveContext.Utility; CGFXDebug.SaveStart(this, saveContext); saveContext.WriteObjectListPointerPlaceholder(FaceDescriptors); saveContext.WriteValueListPointerPlaceholder(BufferObjs); utility.Write(Flags); utility.Write(CommandAlloc); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(FaceDescriptors); saveContext.SaveAndMarkReference(BufferObjs); FaceDescriptors.SaveList(saveContext); }
public void Save(SaveContext saveContext) { var utility = saveContext.Utility; CGFXDebug.SaveStart(this, saveContext); utility.Write((uint)Input); utility.Write((uint)Scale); saveContext.WritePointerPlaceholder(Sampler); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(Sampler); }
protected override void SaveInternal(SaveContext saveContext) { var utility = saveContext.Utility; utility.Write((uint)Format); utility.Write(Elements); utility.Write(Scale); // Vectors saveContext.WriteValueListPointerPlaceholder(Vector); ///////////////////////////// // Begin saving dependent data // UNTESTED (no test data available at the moment) saveContext.SaveAndMarkReference(Vector); }
public void Save(SaveContext saveContext) { var utility = saveContext.Utility; CGFXDebug.SaveStart(this, saveContext); TexEnvBufferColorF.Save(utility); // Fragment Shader utility.Write(FragmentFlags); utility.Write((uint)TranslucencyKind); utility.Write((uint)FresnelSelector); utility.Write((uint)BumpTexture); utility.Write((uint)BumpMode); utility.Write(IsBumpRenormalize ? 1u : 0u); // Fragment Lighting var pointerTableForFragLightLUTs = new[] { ReflectanceRSampler, ReflectanceGSampler, ReflectanceBSampler, Distribution0Sampler, Distribution1Sampler, FresnelSampler }; saveContext.WritePointerPlaceholder(pointerTableForFragLightLUTs); for (var i = 0; i < TextureEnvironments.Length; i++) { TextureEnvironments[i].Save(saveContext); } utility.Write(AlphaTestRawCommands); utility.Write(FragmentShaderRawCommands); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(pointerTableForFragLightLUTs); pointerTableForFragLightLUTs.SaveList(saveContext); }
public override void Save(SaveContext saveContext) { var utility = saveContext.Utility; // Update the internal OriginalOffset; we'll need this to resolve the reference bones later OriginalOffset = utility.GetWritePosition(); // Unlike most objects loaded from a DICT, bones DO NOT use the stndard // Type/Magic/Revision/Name/MetaData header and instead do their own thing... // (in short, not calling base.Save() here!!) saveContext.StringTable.EnqueueAndWriteTempRel(Name); utility.Write((uint)Flags); utility.Write(Index); // Fix ParentIndex in case it's wrong (note that Indexes MUST be correct before Save()!) ParentIndex = Parent?.Index ?? -1; // -1 is used if null (root bone) utility.Write(ParentIndex); saveContext.WritePointerPlaceholder(Parent); saveContext.WritePointerPlaceholder(Child); saveContext.WritePointerPlaceholder(PrevSibling); saveContext.WritePointerPlaceholder(NextSibling); Scale.Write(utility); Rotation.Write(utility); Translation.Write(utility); LocalTransform.Write(utility); WorldTransform.Write(utility); InvWorldTransform.Write(utility); utility.Write((uint)BillboardMode); saveContext.WriteDICTPointerPlaceholder(MetaDatas); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(MetaDatas); MetaDatas?.SaveEntries(saveContext); }
protected override void SaveInternal(SaveContext saveContext) { var utility = saveContext.Utility; utility.Write(BufferObject); utility.Write(LocationFlag); utility.Write(RawBuffer.Length); saveContext.IMAGData.EnqueueAndWriteTempRel(RawBuffer); utility.Write(LocationPtr); utility.Write(MemoryArea); utility.Write(VertexStride); saveContext.WriteObjectListPointerPlaceholder(Attributes); ///////////////////////////// // Begin saving dependent data saveContext.SaveAndMarkReference(Attributes); Attributes.SaveList(saveContext); }
public override void Save(SaveContext saveContext) { base.Save(saveContext); var utility = saveContext.Utility; utility.Write(MaterialFlags); utility.Write((uint)TextureCoordinatesConfig); utility.Write((uint)TranslucencyKind); // NOTE: These are inline, not pointered to MaterialColor.Save(saveContext); Rasterization.Save(saveContext); FragmentOperation.Save(saveContext); // Texture coordinates utility.Write(UsedTextureCoordinates); for (var i = 0; i < TextureCoords.Length; i++) { var tc = TextureCoords[i]; utility.Write(tc.SourceCoordIndex); utility.Write((uint)tc.MappingType); utility.Write(tc.ReferenceCameraIndex); utility.Write((uint)tc.TransformType); tc.Scale.Write(utility); utility.Write(tc.Rotation); tc.Translation.Write(utility); utility.Write(tc.Flags); tc.Transform.Write(utility); } // Texture mappers for (var i = 0; i < TextureMappers.Length; i++) { saveContext.WritePointerPlaceholder(TextureMappers[i]); } saveContext.WritePointerPlaceholder(ShaderReference); saveContext.WritePointerPlaceholder(FragmentShader); utility.Write(ShaderProgramDescIndex); // NOT SUPPORTED utility.Write(ShaderParametersCount); utility.Write(ShaderParametersPointerTableOffset); if (ShaderParametersCount != 0 || ShaderParametersPointerTableOffset != 0) { throw new NotImplementedException($"ModelMaterial Save: Shader Parameters UNSUPPORTED"); } utility.Write(LightSetIndex); // Reference?? utility.Write(FogIndex); // Reference?? // NOTE -- See SPICA GfxMaterial.cs for computations involving these hash functions. // I ASSUME if I never change any values in the material these never need recomputed. // Let's try to get by without needing this support right now... utility.Write(MaterialFlagsHash); utility.Write(ShaderParamsHash); utility.Write(TextureCoordsHash); utility.Write(TextureSamplersHash); utility.Write(TextureMappersHash); utility.Write(MaterialColorsHash); utility.Write(RasterizationHash); utility.Write(FragLightHash); utility.Write(FragLightLUTHash); utility.Write(FragLightLUTSampHash); utility.Write(TextureEnvironmentHash); utility.Write(AlphaTestHash); utility.Write(FragOpHash); utility.Write(UniqueId); ///////////////////////////// // Begin saving dependent data TextureMappers.SaveList(saveContext); saveContext.SaveAndMarkReference(ShaderReference); saveContext.SaveAndMarkReference(FragmentShader); }