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);
            }
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
            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);
            }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #11
0
        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);
        }