MoonWorksMultiWindowTest/src/MoonWorksMultiWindowGame.cs

114 lines
2.5 KiB
C#

using MoonWorks.Graphics;
using MoonWorks.Window;
using MoonWorks;
using MoonWorksMultiWindow.Graphics;
using System.Threading.Tasks;
namespace MoonWorksMultiWindow
{
class MoonWorksMultiWindowGame : Game
{
private GraphicsObjects GraphicsObjects { get; }
private int RenderWidth { get; }
private int RenderHeight { get; }
private OSWindow 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
);
RenderWidth = (int)windowCreateInfo.WindowWidth;
RenderHeight = (int)windowCreateInfo.WindowHeight;
var extraWindowCreateInfo = new WindowCreateInfo
{
WindowTitle = "Extra Window",
WindowWidth = 1280,
WindowHeight = 720,
ScreenMode = ScreenMode.Windowed
};
ExtraWindow = new OSWindow(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()
{
}
}
}