public void Execute(RenderContext context) { RenderedObjectsOpaque = 0; RenderedObjectsTransparent = 0; EnsureIntermediateFramebuffer(context.GraphicsDevice, context.RenderTarget); _renderList.Clear(); context.Scene3D?.BuildRenderList( _renderList, context.Scene3D.Camera, context.GameTime); BuildingRenderList?.Invoke(this, new BuildingRenderListEventArgs( _renderList, context.Scene3D?.Camera, context.GameTime)); _commandList.Begin(); if (context.Scene3D != null) { _commandList.PushDebugGroup("3D Scene"); Render3DScene(_commandList, context.Scene3D, context); _commandList.PopDebugGroup(); } else { _commandList.SetFramebuffer(_intermediateFramebuffer); _commandList.ClearColorTarget(0, ClearColor); } // GUI and camera-dependent 2D elements { _commandList.PushDebugGroup("2D Scene"); _drawingContext.Begin( _commandList, context.ContentManager.LinearClampSampler, new SizeF(context.RenderTarget.Width, context.RenderTarget.Height)); context.Scene3D?.Render(_drawingContext); context.Scene2D?.Render(_drawingContext); Rendering2D?.Invoke(this, new Rendering2DEventArgs(_drawingContext)); _drawingContext.End(); _commandList.PopDebugGroup(); } _commandList.End(); context.GraphicsDevice.SubmitCommands(_commandList); _textureCopier.Execute( _intermediateTexture, context.RenderTarget); }
internal void RaiseBuildingRenderList(BuildingRenderListEventArgs args) { BuildingRenderList?.Invoke(this, args); }