protected override void LoadContent() { var assetManager = Services.GetSafeServiceAs <ContentManager>(); var graphicsContext = Services.GetSafeServiceAs <GraphicsContext>(); // Preload the scene if it exists if (InitialSceneUrl != null && assetManager.Exists(InitialSceneUrl)) { SceneInstance = new SceneInstance(Services, assetManager.Load <Scene>(InitialSceneUrl)); } if (MainRenderFrame == null) { // TODO GRAPHICS REFACTOR Check if this is a good idea to use Presenter targets MainRenderFrame = RenderFrame.FromTexture(GraphicsDevice.Presenter?.BackBuffer, GraphicsDevice.Presenter?.DepthStencilBuffer); if (MainRenderFrame != null) { previousWidth = MainRenderFrame.Width; previousHeight = MainRenderFrame.Height; } } // Create the drawing context renderContext = RenderContext.GetShared(Services); renderDrawContext = new RenderDrawContext(Services, renderContext, graphicsContext); }
private void CreatePipeline() { const int TargetWidth = 800; const int TargetHeight = 480; // Create render targets textures = new [] { Texture.New2D(GraphicsDevice, TargetWidth, TargetHeight, PixelFormat.R8G8B8A8_UNorm, TextureFlags.RenderTarget | TextureFlags.ShaderResource), Texture.New2D(GraphicsDevice, TargetWidth, TargetHeight, PixelFormat.R8G8B8A8_UNorm, TextureFlags.RenderTarget | TextureFlags.ShaderResource), Texture.New2D(GraphicsDevice, TargetWidth, TargetHeight, PixelFormat.R8G8B8A8_UNorm, TextureFlags.RenderTarget | TextureFlags.ShaderResource) }; var depthBuffer = Texture.New2D(GraphicsDevice, TargetWidth, TargetHeight, PixelFormat.D24_UNorm_S8_UInt, TextureFlags.DepthStencil); var multipleRenderFrames = new DirectRenderFrameProvider(RenderFrame.FromTexture(textures, depthBuffer)); // Setup the default rendering pipeline scene = new Scene { Settings = { GraphicsCompositor = new SceneGraphicsCompositorLayers { Cameras = { mainCamera.Get <CameraComponent>() }, Master = { Renderers = { new ClearRenderFrameRenderer { Color = Color.Lavender, Output = multipleRenderFrames }, new SceneCameraRenderer { Mode = new CameraRendererModeForward{ ModelEffect = "MultipleRenderTargetsEffect" }, Output = multipleRenderFrames }, new ClearRenderFrameRenderer { Output = new MasterRenderFrameProvider() }, new SceneDelegateRenderer(DisplayGBuffer) { Name = "DisplayGBuffer" }, } } } } }; SceneSystem.SceneInstance = new SceneInstance(Services, scene); }
public ShadowMapAtlasTexture(Texture texture, int textureId) { if (texture == null) { throw new ArgumentNullException("texture"); } Texture = texture; Clear(Texture.Width, Texture.Height); Width = texture.Width; Height = texture.Height; RenderFrame = RenderFrame.FromTexture((Texture)null, texture); Id = textureId; }
protected override void LoadContent() { var assetManager = Services.GetSafeServiceAs <AssetManager>(); // Preload the scene if it exists if (InitialSceneUrl != null && assetManager.Exists(InitialSceneUrl)) { SceneInstance = new SceneInstance(Services, assetManager.Load <Scene>(InitialSceneUrl)); } if (MainRenderFrame == null) { MainRenderFrame = RenderFrame.FromTexture(GraphicsDevice.BackBuffer, GraphicsDevice.DepthStencilBuffer); previousWidth = MainRenderFrame.Width; previousHeight = MainRenderFrame.Height; } // Create the drawing context renderContext = RenderContext.GetShared(Services); }
public SceneRenderer(GameSettingsAsset gameSettings) { if (gameSettings == null) { throw new ArgumentNullException(nameof(gameSettings)); } // Initialize services Services = new ServiceRegistry(); ContentManager = new ContentManager(Services); var renderingSettings = gameSettings.Get <RenderingSettings>(); GraphicsDevice = GraphicsDevice.New(DeviceCreationFlags.None, new[] { renderingSettings.DefaultGraphicsProfile }); var graphicsDeviceService = new GraphicsDeviceServiceLocal(Services, GraphicsDevice); EffectSystem = new EffectSystem(Services); GraphicsContext = new GraphicsContext(new CommandList(GraphicsDevice), new ResourceGroupAllocator(GraphicsDevice)); Services.AddService(typeof(GraphicsContext), GraphicsContext); SceneSystem = new SceneSystem(Services); // Create game systems GameSystems = new GameSystemCollection(Services); GameSystems.Add(new GameFontSystem(Services)); GameSystems.Add(new UISystem(Services)); GameSystems.Add(EffectSystem); GameSystems.Add(SceneSystem); GameSystems.Initialize(); // Fake presenter // TODO GRAPHICS REFACTOR: This is needed be for render stage setup GraphicsDevice.Presenter = new RenderTargetGraphicsPresenter(GraphicsDevice, Texture.New2D(GraphicsDevice, renderingSettings.DefaultBackBufferWidth, renderingSettings.DefaultBackBufferHeight, renderingSettings.ColorSpace == ColorSpace.Linear ? PixelFormat.R8G8B8A8_UNorm_SRgb : PixelFormat.R8G8B8A8_UNorm, TextureFlags.ShaderResource | TextureFlags.RenderTarget), PixelFormat.D24_UNorm_S8_UInt); SceneSystem.MainRenderFrame = RenderFrame.FromTexture(GraphicsDevice.Presenter.BackBuffer, GraphicsDevice.Presenter.DepthStencilBuffer); }
public override void Initialize(Entity cameraRoot, CameraComponent leftCamera, CameraComponent rightCamera, bool requireMirror = false) { var size = RenderFrameSize; if (!GoogleVr.Init(size.Width, size.Height)) { throw new Exception("Failed to Init Google VR SDK"); } RenderFrameProvider = new DirectRenderFrameProvider(RenderFrame.FromTexture( Texture.New2D(GraphicsDevice, size.Width, size.Height, PixelFormat.R8G8B8A8_UNorm_SRgb, TextureFlags.RenderTarget | TextureFlags.ShaderResource) )); var compositor = (SceneGraphicsCompositorLayers)Game.SceneSystem.SceneInstance.RootScene.Settings.GraphicsCompositor; compositor.Master.Add(new SceneDelegateRenderer((x, y) => { var frame = GoogleVr.GetNextFrame(); GoogleVr.SubmitRenderTarget(x.GraphicsContext, RenderFrameProvider.RenderFrame.RenderTargets[0], frame, 0); if (!GoogleVr.SubmitFrame(GraphicsDevice, frame, ref headMatrix)) { throw new Exception("Failed to SubmitFrame to Google VR SDK"); } })); leftCamera.UseCustomProjectionMatrix = true; rightCamera.UseCustomProjectionMatrix = true; leftCamera.UseCustomViewMatrix = true; rightCamera.UseCustomViewMatrix = true; leftCamera.NearClipPlane *= ViewScaling; rightCamera.NearClipPlane *= ViewScaling; if (requireMirror) { MirrorTexture = RenderFrameProvider.RenderFrame.RenderTargets[0]; //we don't really have a mirror in this case but avoid crashes } base.Initialize(cameraRoot, leftCamera, rightCamera, requireMirror); }