コード例 #1
0
        static void BuildEngine(CommandLineOptions commandLine, EventExchange exchange)
        {
            PerfTracker.StartupEvent("Creating engine");
            var framebuffer   = new MainFramebuffer();
            var sceneRenderer = new SceneRenderer("MainRenderer", framebuffer);

            sceneRenderer // TODO: Populate from json so mods can add new render methods
            .AddRenderer(new SpriteRenderer(framebuffer), typeof(VeldridSpriteBatch))
            .AddRenderer(new EtmRenderer(framebuffer), typeof(EtmWindow))
            .AddRenderer(new SkyboxRenderer(framebuffer), typeof(Skybox))
            .AddRenderer(new DebugGuiRenderer(framebuffer), typeof(DebugGuiRenderable))
            ;

            var engine = new Engine(commandLine.Backend, commandLine.UseRenderDoc, commandLine.StartupOnly, true, sceneRenderer);

#pragma warning disable CA2000 // Dispose objects before losing scopes
            var config      = exchange.Resolve <IGeneralConfig>();
            var shaderCache = new ShaderCache(config.ResolvePath("$(CACHE)/ShaderCache"));

            foreach (var shaderPath in exchange.Resolve <IModApplier>().ShaderPaths)
            {
                shaderCache.AddShaderPath(shaderPath);
            }
#pragma warning restore CA2000 // Dispose objects before losing scopes

            exchange
            .Attach(shaderCache)
            .Attach(framebuffer)
            .Attach(sceneRenderer)
            .Attach(engine)
            .Attach(new ResourceLayoutSource())
            ;
        }
コード例 #2
0
ファイル: IsometricTest.cs プロジェクト: lucorp/ualbion
        protected override void Subscribed()
        {
            var(services, builder) = IsometricSetup.SetupEngine(Exchange,
                                                                IsometricLabyrinthLoader.DefaultWidth,
                                                                IsometricLabyrinthLoader.DefaultHeight,
                                                                IsometricLabyrinthLoader.DefaultBaseHeight,
                                                                IsometricLabyrinthLoader.DefaultTilesPerRow,
                                                                _cmdLine.Backend,
                                                                _cmdLine.UseRenderDoc,
                                                                new Rectangle(0, 0,
                                                                              IsometricLabyrinthLoader.DefaultWidth * IsometricLabyrinthLoader.DefaultTilesPerRow,
                                                                              IsometricLabyrinthLoader.DefaultHeight * 10));

            var config = Resolve <IGeneralConfig>();

            services
            .Add(new InputManager().RegisterMouseMode(MouseMode.Normal, new NormalMouseMode()))
            .Add(new InputBinder((disk, jsonUtil) => InputConfig.Load(config.BasePath, disk, jsonUtil)))
            ;

            _mainFramebuffer = new MainFramebuffer();
            _quadRenderer    = new FullscreenQuadRenderer();
            var quad = new FullscreenQuad("Quad", DrawLayer.MaxLayer,
                                          ((SimpleFramebuffer)builder.Framebuffer).Color,
                                          _mainFramebuffer,
                                          new Vector4(-1, -1, 2, 2));
            var source = new AdhocRenderableSource(new[] { quad });

            services.Add(_mainFramebuffer);
            services.Add(_quadRenderer);
            services.Add(quad);
            Exchange.Attach(services);

            var renderer = Resolve <ISceneRenderer>();

            renderer.AddRenderer(_quadRenderer, typeof(FullscreenQuad));
            renderer.AddSource(source);

            Raise(new InputModeEvent(InputMode.IsoBake));
            Raise(new SetSceneEvent(SceneId.IsometricBake));
            Raise(new SetClearColourEvent(0, 0, 0, 0));
            Raise(new EngineFlagEvent(FlagOperation.Set, EngineFlags.ShowBoundingBoxes));

            Resolve <IEngine>().Run();
        }
コード例 #3
0
        protected override void RenderProcess(ref DrawContext context)
        {
            GL.Enable(EnableCap.DepthTest);
            MainFramebuffer.Activate(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            context.Scene.DrawBackground(context);
            context.Scene.DrawMainObjects(context);
            context.Scene.DrawHUD(context);

            GL.Disable(EnableCap.DepthTest);
            _postBuffer.Activate(ClearBufferMask.ColorBufferBit);
            PostProcessUtility.ResolveMultisampledBuffers(MainFramebuffer, _postBuffer);

            _bloom.Draw(_postBuffer["color"], context);
            _vittage.Draw(_postBuffer["color"], context);
            Framebuffer.Screen.Activate(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            PostProcessUtility.FinalizeHDR(_postBuffer["color"], HDRColorCurve.OnlyExposure, .1f);
        }