Пример #1
0
        public void Run()
        {
            _buff  = new RgbaFloat[Width * Height];
            _color = new Color32(0, 0, 0);

            Renderer.InitRender(_color, _buff, RenderType.GouraudShading);
            Console.Write("加载场景:Scene1...");
            Renderer.LoadScene("Scene1");
            Console.WriteLine("完成");

            Console.Write("编译Shader...");
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            List <string> paths = new List <string>();

            foreach (KeyValuePair <string, Material> item in Renderer.Materials)
            {
                paths.Add($"Shaders/{item.Value.ShaderName}.cs");
            }
            ShaderGenerator.CompleShader(paths);
            stopwatch.Stop();
            Console.WriteLine($"完成,耗时: {stopwatch.ElapsedMilliseconds} 毫秒");

            Renderer.DelegateCollections = ShaderGenerator.DelegateCollections;
            Renderer.ShaderInformation   = ShaderGenerator.ShaderInformation;
            Renderer.InitMaterials();

            GraphicsBackend backend = VeldridStartup.GetPlatformDefaultBackend();

            VeldridStartup.CreateWindowAndGraphicsDevice(
                new WindowCreateInfo(100, 100, (int)(Width * ViewScale), (int)(Height * ViewScale), WindowState.Normal, "Firefly"),
                new GraphicsDeviceOptions(debug: false, swapchainDepthFormat: null, syncToVerticalBlank: false),
                backend,
                out _window,
                out _graphicsDevice);
            CreateDeviceResources();

            Timer timer1 = new Timer
            {
                Interval = 1000,
                Enabled  = true
            };

            timer1.Elapsed += Timer1_Elapsed;

            while (_window.Exists)
            {
                _window.PumpEvents();
                if (!_window.Exists)
                {
                    break;
                }
                for (int i = 0; i < _buff.Length; i++)
                {
                    _buff[i] = new RgbaFloat();
                    Renderer.DepthBuff[i] = float.MaxValue;
                }
                RenderFrame();
                //System.Threading.Thread.Sleep(10);
            }

            _graphicsDevice.Dispose();
        }