private static void WriteEffectInstance(XEffectInstance effect, XofFileSaveData saveData)
        {
            byte[] data;

            using (var ms = new MemoryStream())
                using (var writer = new BinaryWriter(ms))
                {
                    WriteString(effect.EffectFilename, writer);

                    data = ms.ToArray();
                }

            using (var child = saveData.AddData(XofFileDefaultTemplates.EffectInstanceId, effect.Name, null, data))
            {
                foreach (var param in effect.IntegerParameters)
                {
                    WriteEffectParamDWord(param, child);
                }

                foreach (var param in effect.FloatParameters)
                {
                    WriteEffectParamFloats(param, child);
                }

                foreach (var param in effect.StringParameters)
                {
                    WriteEffectParamString(param, child);
                }
            }
        }
Exemplo n.º 2
0
        private static XEffectInstance ReadEffectInstance(XofFileEnumData enumData)
        {
            var effect = new XEffectInstance
            {
                Name = enumData.GetName()
            };

            byte[] data = enumData.GetData();

            using (var ms = new MemoryStream(data, false))
                using (var reader = new BinaryReader(ms))
                {
                    effect.EffectFilename = ReadString(reader);

                    if (ms.Position != ms.Length)
                    {
                        throw new InvalidDataException();
                    }
                }

            int childrenCount = enumData.GetChildrenCount();

            for (int childIndex = 0; childIndex < childrenCount; childIndex++)
            {
                using (var child = enumData.GetChild(childIndex))
                {
                    Guid type = child.GetTemplateType();

                    if (type == XofFileDefaultTemplates.EffectParamDWordId)
                    {
                        effect.IntegerParameters.Add(ReadEffectParamDWord(child));
                    }
                    else if (type == XofFileDefaultTemplates.EffectParamFloatsId)
                    {
                        effect.FloatParameters.Add(ReadEffectParamFloats(child));
                    }
                    else if (type == XofFileDefaultTemplates.EffectParamStringId)
                    {
                        effect.StringParameters.Add(ReadEffectParamString(child));
                    }
                    else
                    {
                        throw new InvalidDataException();
                    }
                }
            }

            return(effect);
        }