private List <SerializableFLBuffer> ParseDefinedBuffersTask(List <string> defineStatements, int start, int count) { List <SerializableFLBuffer> definedBuffers = new List <SerializableFLBuffer>(); for (int i = start; i < start + count; i++) { string[] data = defineStatements[i].Replace("--define texture", "") .Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries); string bufferName = data[0].Trim(); if (bufferName == "in") { SerializableFLBuffer bi = new SerializableEmptyFLBuffer("in"); definedBuffers.Add(bi); continue; } string paramPart = data[1].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0]; SerializableFLBuffer buf = parser.BufferCreator.Create(paramPart, bufferName, data[1].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); if (buf != null) { definedBuffers.Add(buf); } else if (IOManager.FileExists(data[1].Trim().Replace("\"", ""))) { SerializableFromFileFLBuffer bi = new SerializableFromFileFLBuffer(bufferName, data[1].Trim().Replace("\"", "")); definedBuffers.Add(bi); } else { throw new Byt3Exception($"Can not Find BufferLoader for \"{defineStatements[i]}\""); } } return(definedBuffers); }
protected override void Validate( SerializableFLProgram prog, SerializableFLFunction func, SerializableFLInstruction inst, SerializableFLInstructionArgument arg) { SerializableFLBuffer buf = prog.DefinedBuffers.First(x => x.Name == arg.Identifier); if (buf.Modifiers.IsReadOnly) { throw new FLInvalidFLElementModifierUseException( func.Name, FLKeywords.ReadOnlyBufferModifier, $"Can not use instruction {inst.InstructionKey} with a static buffer." ); } if (buf.Modifiers.IsArray) { throw new FLInvalidFLElementModifierUseException( func.Name, FLKeywords.ArrayKey, $"Can not use instruction {inst.InstructionKey} with an array buffer." ); } }
public override object Process(object o) { SerializableFLProgram input = (SerializableFLProgram)o; List <SerializableRandomFLBuffer> rndBuffers = new List <SerializableRandomFLBuffer>(); List <SerializableUnifiedRandomFLBuffer> urndBuffers = new List <SerializableUnifiedRandomFLBuffer>(); for (int i = 0; i < input.DefinedBuffers.Count; i++) { SerializableFLBuffer serializableFlBuffer = input.DefinedBuffers[i]; if (serializableFlBuffer is SerializableRandomFLBuffer r) { rndBuffers.Add(r); input.DefinedBuffers[i] = new SerializableEmptyFLBuffer(r.Name); } else if (serializableFlBuffer is SerializableUnifiedRandomFLBuffer u) { urndBuffers.Add(u); input.DefinedBuffers[i] = new SerializableEmptyFLBuffer(u.Name); } } List <SerializableFLInstruction> weavedBufferInitializationCode = new List <SerializableFLInstruction>(); for (int i = 0; i < rndBuffers.Count; i++) { weavedBufferInitializationCode.Add(new SerializableFLInstruction("setactive", new List <SerializableFLInstructionArgument> { new SerializeBufferArgument(rndBuffers[i].Name), new SerializeDecimalArgument(0), new SerializeDecimalArgument(1), new SerializeDecimalArgument(2), new SerializeDecimalArgument(3), })); weavedBufferInitializationCode.Add(new SerializableFLInstruction("rnd_gpu", new List <SerializableFLInstructionArgument>())); } for (int i = 0; i < urndBuffers.Count; i++) { weavedBufferInitializationCode.Add(new SerializableFLInstruction("setactive", new List <SerializableFLInstructionArgument> { new SerializeBufferArgument(urndBuffers[i].Name), new SerializeDecimalArgument(0), new SerializeDecimalArgument(1), new SerializeDecimalArgument(2), new SerializeDecimalArgument(3), })); weavedBufferInitializationCode.Add(new SerializableFLInstruction("urnd_gpu", new List <SerializableFLInstructionArgument>())); } weavedBufferInitializationCode.Add(new SerializableFLInstruction("setactive", new List <SerializableFLInstructionArgument> { new SerializeBufferArgument("in"), new SerializeDecimalArgument(0), new SerializeDecimalArgument(1), new SerializeDecimalArgument(2), new SerializeDecimalArgument(3), })); if (urndBuffers.Count != 0 || rndBuffers.Count != 0) { string s = "Weaved Assembly:\n"; weavedBufferInitializationCode.ForEach(x => s += "\t" + x + "\n"); Logger.Log(LogType.Log, s, 2); input.Functions.First(x => x.Name == "Main").Instructions.InsertRange(0, weavedBufferInitializationCode); } return(input); }
private List <SerializableFLBuffer> ParseDefinedBuffersTask( List <DefineStatement> defineStatements, int start, int count) { List <SerializableFLBuffer> definedBuffers = new List <SerializableFLBuffer>(); for (int i = start; i < start + count; i++) { FLBufferModifiers bmod = defineStatements[i].Modifiers as FLBufferModifiers; string name = defineStatements[i].Name; List <string> parameter = defineStatements[i].Parameter.ToList(); string bufferName = bmod.ElementName; if (bufferName == FLKeywords.InputBufferKey) { SerializableFLBuffer bi = new SerializableEmptyFLBuffer(FLKeywords.InputBufferKey, bmod); definedBuffers.Add(bi); continue; } string creatorKey = parameter.First(); parameter.RemoveAt(0); if (creatorKey.StartsWith("\"") && creatorKey.EndsWith("\"") ) //IOManager.FileExists(paramPart.Trim().Replace("\"", "")) { string path = creatorKey.Trim().Replace("\"", ""); SerializableFromFileFLBuffer bi = new SerializableFromFileFLBuffer(bufferName, path, bmod, 0); definedBuffers.Add(bi); } else { int size = -1; if (bmod.IsArray && parameter.Count != 0 && !int.TryParse( parameter[0], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out size )) { } SerializableFLBuffer buf = parser.BufferCreator.Create(creatorKey, bufferName, parameter.ToArray(), bmod, size); if (buf != null) { definedBuffers.Add(buf); } else { throw new Byt3Exception($"Can not Find BufferLoader for \"{defineStatements[i]}\""); } } } return(definedBuffers); }
public override object Process(object o) { SerializableFLProgram input = (SerializableFLProgram)o; List <SerializableRandomFLBuffer> rndBuffers = new List <SerializableRandomFLBuffer>(); List <SerializableUnifiedRandomFLBuffer> urndBuffers = new List <SerializableUnifiedRandomFLBuffer>(); for (int i = 0; i < input.DefinedBuffers.Count; i++) { if (input.DefinedBuffers[i].IsArray) { continue; //No support for arrays due to crashes that have not yet been fixed. } SerializableFLBuffer serializableFlBuffer = input.DefinedBuffers[i]; if (serializableFlBuffer is SerializableRandomFLBuffer r) { rndBuffers.Add(r); if (r.IsArray) { input.DefinedBuffers[i] = new SerializableEmptyFLBuffer(r.Name, r.Size, r.Modifiers); } else { input.DefinedBuffers[i] = new SerializableEmptyFLBuffer(r.Name, r.Modifiers); } } else if (serializableFlBuffer is SerializableUnifiedRandomFLBuffer u) { urndBuffers.Add(u); if (u.IsArray) { input.DefinedBuffers[i] = new SerializableEmptyFLBuffer(u.Name, u.Size, u.Modifiers); } else { input.DefinedBuffers[i] = new SerializableEmptyFLBuffer(u.Name, u.Modifiers); } } } List <SerializableFLInstruction> weavedBufferInitializationCode = new List <SerializableFLInstruction>(); for (int i = 0; i < rndBuffers.Count; i++) { weavedBufferInitializationCode.Add( new SerializableFLInstruction( "setactive", new List <SerializableFLInstructionArgument> { new SerializeBufferArgument( rndBuffers [i] .Name ), new SerializeDecimalArgument(0), new SerializeDecimalArgument(1), new SerializeDecimalArgument(2), new SerializeDecimalArgument(3) } ) ); weavedBufferInitializationCode.Add( new SerializableFLInstruction( "rnd_gpu", new List < SerializableFLInstructionArgument > { new SerializeDecimalArgument(seedGenerator.Next()), new SerializeDecimalArgument(seedGenerator.Next()) } ) ); } for (int i = 0; i < urndBuffers.Count; i++) { weavedBufferInitializationCode.Add( new SerializableFLInstruction( "setactive", new List <SerializableFLInstructionArgument> { new SerializeBufferArgument( urndBuffers [i] .Name ), new SerializeDecimalArgument(0), new SerializeDecimalArgument(1), new SerializeDecimalArgument(2), new SerializeDecimalArgument(3) } ) ); weavedBufferInitializationCode.Add( new SerializableFLInstruction( "urnd_gpu", new List < SerializableFLInstructionArgument > { new SerializeDecimalArgument(seedGenerator.Next()), new SerializeDecimalArgument(seedGenerator.Next()) } ) ); } weavedBufferInitializationCode.Add( new SerializableFLInstruction( "setactive", new List <SerializableFLInstructionArgument> { new SerializeBufferArgument( FLKeywords .InputBufferKey ), new SerializeDecimalArgument(0), new SerializeDecimalArgument(1), new SerializeDecimalArgument(2), new SerializeDecimalArgument(3) } ) ); if (urndBuffers.Count != 0 || rndBuffers.Count != 0) { string s = "Weaved Assembly:\n"; weavedBufferInitializationCode.ForEach(x => s += "\t" + x + "\n"); Logger.Log(LogType.Log, s, 2); input.Functions.First(x => x.Name == FLKeywords.EntryFunctionKey).Instructions .InsertRange(0, weavedBufferInitializationCode); } return(input); }