예제 #1
0
        /// <summary>
        /// Overridden Awake method for setting up the Interpreter and add the commands to the console
        /// </summary>
        protected override void Awake()
        {
            Tex                 = TextureLoader.ParameterToTexture(width, height, "FLGeneratorMainTexture");
            SpecularTex         = TextureLoader.ParameterToTexture(width, height, "FLGeneratorSpecularTexture");
            SpecularTex.TexType = TextureType.Specular;
            for (int i = 0; i < previews.Count; i++)
            {
                previews[i].Textures[0] = Tex;
                previews[i].Textures[1] = SpecularTex;
            }


            if (multiThread)
            {
                flRunner = new FlMultiThreadScriptRunner(null, DataVectorTypes.Uchar1, "assets/kernel/");
            }
            else
            {
                flRunner = new FLScriptRunner(CLAPI.MainThread, DataVectorTypes.Uchar1, "assets/kernel/");
            }


            DebugConsoleComponent console =
                Owner.Scene.GetChildWithName("Console").GetComponent <DebugConsoleComponent>();

            console?.AddCommand("runfl", cmd_RunFL);
            console?.AddCommand("r", cmd_FLReset);
        }
예제 #2
0
        private void Run()
        {
            FLConsole.Settings.SetVerbosity();
            BufferCreator creator = new BufferCreator();

            FLConsole.Settings.BufferCreatorTypes.ForEach(x =>
                                                          creator.AddBufferCreator((ASerializableBufferCreator)Activator.CreateInstance(x)));
            KernelDatabase db = new KernelDatabase(CLAPI.MainThread, FLConsole.Settings.KernelFolder,
                                                   DataVectorTypes.Uchar1);
            FLInstructionSet      iset = FLInstructionSet.CreateWithBuiltInTypes(db);
            FLProgramCheckBuilder programCheckBuilder = new FLProgramCheckBuilder(iset, creator);

            FLConsole.Settings.ProgramCheckTypes.ForEach(x =>
                                                         programCheckBuilder.AddProgramCheck((FLProgramCheck)Activator.CreateInstance(x)));


            FLScriptRunner runner =
                new FLScriptRunner(CLAPI.MainThread, db, creator, iset, programCheckBuilder,
                                   new WorkItemRunnerSettings(FLConsole.Settings.MultiThread,
                                                              FLConsole.Settings.WorkSizeMultiplier));

            string[] inputFiles  = SetInputFilesCommand.InputFiles;
            string[] outputFiles = SetOutputFilesCommand.OutputFiles;


            for (int i = 0; i < inputFiles.Length; i++)
            {
                string inp  = inputFiles[i];
                string outp = outputFiles.Length > i
                    ? outputFiles[i]
                    : $"./{Path.GetFileNameWithoutExtension(inp)}.out.png";

                Bitmap bmp = new Bitmap(FLConsole.Settings.Resolution.X,
                                        FLConsole.Settings.Resolution.Y);

                runner.Enqueue(new FlScriptExecutionContext(inp, bmp, result => OnFinishCallback(result, outp)));
            }

            runner.Process();
        }
예제 #3
0
        public static void Initialize(bool multiThread)
        {
            if (runnerInit)
            {
                return;
            }

            runnerInit = true;
            if (multiThread)
            {
                runner = new FlMultiThreadScriptRunner(ProcessFinished);
            }
            else
            {
                runner = new FLScriptRunner(CLAPI.MainThread);
            }
            runner.AddProgramCheck(new ConvBRndCPU2GPUOptimization());
            runner.AddProgramCheck(new ConvIRndCPU2GPUOptimization());
            runner.AddProgramCheck(new RemoveUnusedFunctionsOptimization());
            runner.AddProgramCheck(new InlineJumpInstructionsOptimization());
            InitPerlin();
        }