public override FLBuffer GetBuffer()
        {
            LazyLoadingFLBuffer info = new LazyLoadingFLBuffer(root =>
            {
                Bitmap bmp;
                WFCOverlayMode wfc = new WFCOverlayMode(Parameter.SourceImage.Bitmap, Parameter.N, Parameter.Width,
                                                        Parameter.Height, Parameter.PeriodicInput, Parameter.PeriodicOutput, Parameter.Symmetry,
                                                        Parameter.Ground);
                if (Parameter.Force)
                {
                    do
                    {
                        wfc.Run(Parameter.Limit);
                        bmp = new Bitmap(wfc.Graphics(), new Size(root.Dimensions.x, root.Dimensions.y)); //Apply scaling
                    } while (!wfc.Success);
                }
                else
                {
                    wfc.Run(Parameter.Limit);
                    bmp = new Bitmap(wfc.Graphics(), new Size(root.Dimensions.x, root.Dimensions.y)); //Apply scaling
                }


                return(new FLBuffer(root.Instance, bmp, "WFCBuffer." + Name));
            });

            return(info);
        }
        public static FLBuffer ComputeUrnd(bool isArray, int size, bool initializeOnStart)
        {
            LazyLoadingFLBuffer info = null;

            if (!isArray)
            {
                info = new LazyLoadingFLBuffer(
                    root =>
                {
                    FLBuffer buf = new FLBuffer(
                        root.Instance,
                        CLAPI.CreateRandom(
                            root.InputSize,
                            new byte[] { 1, 1, 1, 1 },
                            RandomInstructionHelper
                            .Randombytesource,
                            true
                            ),
                        root.Dimensions.x,
                        root.Dimensions.y,
                        root.Dimensions.z,
                        "RandomBuffer"
                        );
                    buf.SetRoot(root);
                    return(buf);
                },
                    initializeOnStart
                    );
            }
            else
            {
                info = new LazyLoadingFLBuffer(
                    root =>
                {
                    FLBuffer buf = new FLBuffer(
                        root.Instance,
                        CLAPI.CreateRandom(
                            size,
                            new byte[] { 1, 1, 1, 1 },
                            RandomInstructionHelper
                            .Randombytesource,
                            true
                            ),
                        size,
                        1,
                        1,
                        "RandomBuffer"
                        );
                    buf.SetRoot(root);
                    return(buf);
                },
                    initializeOnStart
                    );
            }


            return(info);
        }
Exemple #3
0
        public static FLBuffer ComputeRnd()
        {
            LazyLoadingFLBuffer info = new LazyLoadingFLBuffer(root =>
            {
                FLBuffer buf = new FLBuffer(root.Instance, CLAPI.CreateRandom(root.InputSize, new byte[] { 1, 1, 1, 1 },
                                                                              RandomInstructionHelper.Randombytesource, false), root.Dimensions.x, root.Dimensions.y,
                                            "RandomBuffer");
                buf.SetRoot(root);
                return(buf);
            });

            return(info);
        }
Exemple #4
0
        public override object Process(object o)
        {
            SerializableFLProgram input = (SerializableFLProgram)o;

            Dictionary <string, SerializableExternalFLFunction> convertedFuncs =
                new Dictionary <string, SerializableExternalFLFunction>();

            for (int i = input.ExternalFunctions.Count - 1; i >= 0; i--)
            {
                SerializableExternalFLFunction serializableExternalFlFunction = input.ExternalFunctions[i];
                if (serializableExternalFlFunction.Modifiers.ComputeOnce)
                {
                    string newName = "_cached_" + serializableExternalFlFunction.Name;
                    convertedFuncs.Add(newName, serializableExternalFlFunction);
                    input.ExternalFunctions.RemoveAt(i);


                    LazyLoadingFLBuffer buf = new LazyLoadingFLBuffer(
                        root =>
                    {
                        FLProgram prog =
                            serializableExternalFlFunction
                            .ExternalProgram
                            .Initialize(
                                root.Instance,
                                InstructionSet
                                );
                        FLBuffer b = new FLBuffer(
                            root.Instance,
                            root.Dimensions.x,
                            root.Dimensions.y,
                            root.Dimensions.z,
                            "CachedBuffer" +
                            serializableExternalFlFunction
                            .Name
                            );
                        prog.Run(b, true);

                        b = prog.GetActiveBuffer(true);
                        prog.FreeResources();
                        return(b);
                    },
                        serializableExternalFlFunction
                        .Modifiers.InitializeOnStart
                        );

                    input.DefinedBuffers.Add(
                        new SerializableScriptBuffer(
                            newName,
                            new FLBufferModifiers(
                                newName,
                                new[]
                    {
                        FLKeywords
                        .ReadOnlyBufferModifier
                    }
                                ),
                            buf
                            )
                        );
                }
            }

            foreach (KeyValuePair <string, SerializableExternalFLFunction> staticFunction in convertedFuncs)
            {
                foreach (SerializableFLFunction serializableFlFunction in input.Functions)
                {
                    foreach (SerializableFLInstruction serializableFlInstruction in serializableFlFunction.Instructions)
                    {
                        for (int i = 0; i < serializableFlInstruction.Arguments.Count; i++)
                        {
                            SerializableFLInstructionArgument arg = serializableFlInstruction.Arguments[i];
                            if (arg.Identifier == staticFunction.Value.Name)
                            {
                                serializableFlInstruction.Arguments[i] =
                                    new SerializeBufferArgument(staticFunction.Key);
                            }
                        }
                    }
                }
            }


            return(input);
        }