/// <summary> /// Draws this scene instance with the specified context and <see cref="RenderFrame"/>. /// </summary> /// <param name="context">The context.</param> /// <param name="toFrame">To frame.</param> /// <param name="compositorOverride">The compositor overload. Set this value to by-pass the default compositor of a scene.</param> /// <exception cref="System.ArgumentNullException"> /// context /// or /// toFrame /// </exception> public void Draw(RenderDrawContext context, RenderFrame toFrame, ISceneGraphicsCompositor compositorOverride = null) { if (context == null) { throw new ArgumentNullException("context"); } if (toFrame == null) { throw new ArgumentNullException("toFrame"); } // If no scene, then we can return immediately if (Scene == null) { return; } var commandList = context.CommandList; var previousRenderContext = currentRenderContext; currentRenderContext = context.RenderContext; // Update global time // TODO GRAPHICS REFACTOR //context.GraphicsDevice.Parameters.Set(GlobalKeys.Time, (float)gameTime.Total.TotalSeconds); //context.GraphicsDevice.Parameters.Set(GlobalKeys.TimeStep, (float)gameTime.Elapsed.TotalSeconds); try { // Always clear the state of the GraphicsDevice to make sure a scene doesn't start with a wrong setup commandList.ClearState(); // Draw the main scene using the current compositor (or the provided override) var graphicsCompositor = compositorOverride ?? Scene.Settings.GraphicsCompositor; if (graphicsCompositor != null) { // Push context (pop after using) using (context.RenderContext.PushTagAndRestore(RenderFrame.Current, toFrame)) using (context.RenderContext.PushTagAndRestore(SceneGraphicsLayer.Master, toFrame)) using (context.RenderContext.PushTagAndRestore(Current, this)) { graphicsCompositor.Draw(context); } } } catch (Exception ex) { Log.Error("An exception occurred while rendering", ex); } finally { currentRenderContext = previousRenderContext; } }
public ISceneGraphicsCompositor GraphicsCompositorOverride { get; set; } // Overrides are accessible only at runtime protected override void Destroy() { if (GraphicsCompositorOverride != null) { GraphicsCompositorOverride.Dispose(); GraphicsCompositorOverride = null; } base.Destroy(); }
} // Overrides are accessible only at runtime protected override void Destroy() { if (GraphicsCompositorOverride != null) { GraphicsCompositorOverride.Dispose(); GraphicsCompositorOverride = null; } base.Destroy(); }
/// <summary> /// Draws this scene instance with the specified context and <see cref="RenderFrame"/>. /// </summary> /// <param name="context">The context.</param> /// <param name="toFrame">To frame.</param> /// <param name="compositorOverride">The compositor overload. Set this value to by-pass the default compositor of a scene.</param> /// <exception cref="System.ArgumentNullException"> /// context /// or /// toFrame /// </exception> public void Draw(RenderContext context, RenderFrame toFrame, ISceneGraphicsCompositor compositorOverride = null) { if (context == null) { throw new ArgumentNullException("context"); } if (toFrame == null) { throw new ArgumentNullException("toFrame"); } // If no scene, then we can return immediately if (Scene == null) { return; } var graphicsDevice = context.GraphicsDevice; bool hasGraphicsBegin = false; // Update global time var gameTime = context.Time; context.GraphicsDevice.Parameters.Set(GlobalKeys.Time, (float)gameTime.Total.TotalSeconds); context.GraphicsDevice.Parameters.Set(GlobalKeys.TimeStep, (float)gameTime.Elapsed.TotalSeconds); try { graphicsDevice.Begin(); hasGraphicsBegin = true; // Always clear the state of the GraphicsDevice to make sure a scene doesn't start with a wrong setup graphicsDevice.ClearState(); // Draw the main scene using the current compositor (or the provided override) var graphicsCompositor = compositorOverride ?? Scene.Settings.GraphicsCompositor; if (graphicsCompositor != null) { // Push context (pop after using) using (context.PushTagAndRestore(RenderFrame.Current, toFrame)) using (context.PushTagAndRestore(SceneGraphicsLayer.Master, toFrame)) using (context.PushTagAndRestore(Current, this)) using (context.PushTagAndRestore(CameraRendererMode.RendererTypesKey, RendererTypes)) { graphicsCompositor.Draw(context); } } } catch (Exception ex) { Log.Error("An exception occurred while rendering", ex); } finally { if (hasGraphicsBegin) { graphicsDevice.End(); } } }
/// <summary> /// Draws this scene instance with the specified context and <see cref="RenderFrame"/>. /// </summary> /// <param name="context">The context.</param> /// <param name="toFrame">To frame.</param> /// <param name="compositorOverride">The compositor overload. Set this value to by-pass the default compositor of a scene.</param> /// <exception cref="System.ArgumentNullException"> /// context /// or /// toFrame /// </exception> public void Draw(RenderContext context, RenderFrame toFrame, ISceneGraphicsCompositor compositorOverride = null) { if (context == null) throw new ArgumentNullException("context"); if (toFrame == null) throw new ArgumentNullException("toFrame"); // If no scene, then we can return immediately if (Scene == null) { return; } var graphicsDevice = context.GraphicsDevice; bool hasGraphicsBegin = false; // Update global time var gameTime = context.Time; context.GraphicsDevice.Parameters.Set(GlobalKeys.Time, (float)gameTime.Total.TotalSeconds); context.GraphicsDevice.Parameters.Set(GlobalKeys.TimeStep, (float)gameTime.Elapsed.TotalSeconds); try { graphicsDevice.Begin(); hasGraphicsBegin = true; // Always clear the state of the GraphicsDevice to make sure a scene doesn't start with a wrong setup graphicsDevice.ClearState(); // Draw the main scene using the current compositor (or the provided override) var graphicsCompositor = compositorOverride ?? Scene.Settings.GraphicsCompositor; if (graphicsCompositor != null) { // Push context (pop after using) using (context.PushTagAndRestore(RenderFrame.Current, toFrame)) using (context.PushTagAndRestore(SceneGraphicsLayer.Master, toFrame)) using (context.PushTagAndRestore(Current, this)) using (context.PushTagAndRestore(CameraRendererMode.RendererTypesKey, RendererTypes)) { graphicsCompositor.Draw(context); } } } catch (Exception ex) { Log.Error("An exception occurred while rendering", ex); } finally { if (hasGraphicsBegin) { graphicsDevice.End(); } } }
/// <summary> /// Draws this scene instance with the specified context and <see cref="RenderFrame"/>. /// </summary> /// <param name="context">The context.</param> /// <param name="toFrame">To frame.</param> /// <param name="compositorOverride">The compositor overload. Set this value to by-pass the default compositor of a scene.</param> /// <exception cref="System.ArgumentNullException"> /// context /// or /// toFrame /// </exception> public void Draw(RenderDrawContext context, RenderFrame toFrame, ISceneGraphicsCompositor compositorOverride = null) { if (context == null) throw new ArgumentNullException("context"); if (toFrame == null) throw new ArgumentNullException("toFrame"); // If no scene, then we can return immediately if (Scene == null) { return; } var commandList = context.CommandList; var previousRenderContext = currentRenderContext; currentRenderContext = context.RenderContext; // Update global time // TODO GRAPHICS REFACTOR //context.GraphicsDevice.Parameters.Set(GlobalKeys.Time, (float)gameTime.Total.TotalSeconds); //context.GraphicsDevice.Parameters.Set(GlobalKeys.TimeStep, (float)gameTime.Elapsed.TotalSeconds); try { // Always clear the state of the GraphicsDevice to make sure a scene doesn't start with a wrong setup commandList.ClearState(); // Draw the main scene using the current compositor (or the provided override) var graphicsCompositor = compositorOverride ?? Scene.Settings.GraphicsCompositor; if (graphicsCompositor != null) { // Push context (pop after using) using (context.RenderContext.PushTagAndRestore(RenderFrame.Current, toFrame)) using (context.RenderContext.PushTagAndRestore(SceneGraphicsLayer.Master, toFrame)) using (context.RenderContext.PushTagAndRestore(Current, this)) { graphicsCompositor.Draw(context); } } } catch (Exception ex) { Log.Error("An exception occurred while rendering", ex); } finally { currentRenderContext = previousRenderContext; } }