using MoonWorks.Graphics; using MoonWorks; using MoonWorksMultiWindow.Graphics; using System.Threading.Tasks; namespace MoonWorksMultiWindow { class MoonWorksMultiWindowGame : Game { private GraphicsObjects GraphicsObjects { get; } private Window ExtraWindow { get; } public MoonWorksMultiWindowGame( WindowCreateInfo windowCreateInfo, PresentMode presentMode, bool debugMode ) : base(windowCreateInfo, presentMode, 60, debugMode) { // Insert your game initialization logic here. GraphicsObjects = new GraphicsObjects( GraphicsDevice, windowCreateInfo.WindowWidth, windowCreateInfo.WindowHeight ); var extraWindowCreateInfo = new WindowCreateInfo { WindowTitle = "Extra Window", WindowWidth = 1280, WindowHeight = 720, ScreenMode = ScreenMode.Windowed }; ExtraWindow = new Window(extraWindowCreateInfo); } protected override void Update(System.TimeSpan dt) { // Insert your game update logic here. } protected override void Draw(System.TimeSpan dt, double alpha) { var mainDraw = Task.Run(MainDraw); var extraDraw = Task.Run(ExtraWindowDraw); mainDraw.Wait(); extraDraw.Wait(); } private void MainDraw() { var commandBuffer = GraphicsDevice.AcquireCommandBuffer(); commandBuffer.BeginRenderPass( new ColorAttachmentInfo { RenderTarget = GraphicsObjects.RenderTargets.ExampleRenderTarget, ClearColor = Color.CornflowerBlue, LoadOp = LoadOp.Clear, StoreOp = StoreOp.DontCare } ); commandBuffer.EndRenderPass(); commandBuffer.QueuePresent( GraphicsObjects.RenderTargets.ExampleRenderTarget.TextureSlice, Filter.Nearest, Window ); GraphicsDevice.Submit(commandBuffer); } private void ExtraWindowDraw() { var commandBuffer = GraphicsDevice.AcquireCommandBuffer(); commandBuffer.BeginRenderPass( new ColorAttachmentInfo { RenderTarget = GraphicsObjects.RenderTargets.ExtraWindowRenderTarget, ClearColor = Color.OrangeRed, LoadOp = LoadOp.Clear, StoreOp = StoreOp.DontCare } ); commandBuffer.EndRenderPass(); commandBuffer.QueuePresent( GraphicsObjects.RenderTargets.ExtraWindowRenderTarget.TextureSlice, Filter.Nearest, ExtraWindow ); GraphicsDevice.Submit(commandBuffer); } protected override void OnDestroy() { } } }