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()) ; }
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(); }
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); }