private void DrawFinalToScreen(SpriteBatch spriteBatch) { if (GameController.inGameState != InGameState.INMENU) //Standard draw { ScreenController.graphicsDevice.SetRenderTarget(null); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null); spriteBatch.Draw(DisplayController.GetRenderTarget(worldLightingRender), Vector2.Zero, Color.White); spriteBatch.End(); } else //In menu so draw Blur { ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(blurRender)); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, Effectlighting); Effectlighting.Parameters["red"].SetValue(WorldController.globalRed); Effectlighting.Parameters["green"].SetValue(WorldController.globalGreen); Effectlighting.Parameters["blue"].SetValue(WorldController.globalBlue); spriteBatch.Draw(DisplayController.GetRenderTarget(worldLightingRender), Vector2.Zero, Color.White); spriteBatch.End(); ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(blurRenderTwo)); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null); Effectblur.Parameters["Texture"].SetValue(DisplayController.GetRenderTarget(blurRender)); Effectblur.CurrentTechnique.Passes[0].Apply(); spriteBatch.Draw(DisplayController.GetRenderTarget(blurRender), Vector2.Zero, Color.White); spriteBatch.End(); ScreenController.graphicsDevice.SetRenderTarget(null); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null); Effectblur.Parameters["Texture"].SetValue(DisplayController.GetRenderTarget(blurRenderTwo)); Effectblur.CurrentTechnique.Passes[1].Apply(); spriteBatch.Draw(DisplayController.GetRenderTarget(blurRenderTwo), Vector2.Zero, Color.White); spriteBatch.End(); } }
private void InitRendering() { //Render Targets worldObjectsRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, true); worldShadowsRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, true); worldLightingRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); lightingMaskRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); shadowMaskInvertedRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); shadowMaskRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); blurRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); blurRenderTwo = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); burntLayerRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); burntToSoftenRender = DisplayController.AddRenderTarget(camera.viewport.Width, camera.viewport.Height, false); //Effects Effectshadow = GraphicsManager.GetEffect(Engine.ContentStorage.EffectType.Shadow); Effectshadow.Parameters["shadowMask"].SetValue(DisplayController.GetRenderTarget(shadowMaskRender)); Effectlighting = GraphicsManager.GetEffect(Engine.ContentStorage.EffectType.Lighting); Effectlighting.Parameters["lightMask"].SetValue(DisplayController.GetRenderTarget(lightingMaskRender)); EffectshadowInverter = GraphicsManager.GetEffect(Engine.ContentStorage.EffectType.ShadowInverter); EffectshadowInverter.Parameters["shadowMask"].SetValue(DisplayController.GetRenderTarget(shadowMaskInvertedRender)); EffectshadowInverter.Parameters["shadowMask"].SetValue(DisplayController.GetRenderTarget(shadowMaskInvertedRender)); Effectsoften = GraphicsManager.GetEffect(Engine.ContentStorage.EffectType.Soften); Effectsoften.Parameters["Texture"].SetValue(DisplayController.GetRenderTarget(burntLayerRender)); Effectblur = GraphicsManager.GetEffect(Engine.ContentStorage.EffectType.Blur); }
//Render order //Draw Ground Layers //Draw Burnt Layers //Draw Objects //Draw Shadows //Draw Fire and Smoke //Draw Lighting private void DrawShadows(SpriteBatch spriteBatch) { //Switch RenderTarget to ShadowTarget ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(shadowMaskInvertedRender)); ScreenController.graphicsDevice.Clear(Color.Black); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.TranslationMatrix(1f, 1f)); mapObjectsDraw.DrawShadows(spriteBatch); spriteBatch.End(); ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(shadowMaskRender)); ScreenController.graphicsDevice.Clear(Color.Black); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.TranslationMatrix(1f, 1f)); mapObjectsDraw.DrawLightsOverShadows(spriteBatch); spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.NonPremultiplied, null, null, null, EffectshadowInverter); EffectshadowInverter.Parameters["darkness"].SetValue(WorldController.shadowDarkness); spriteBatch.Draw(DisplayController.GetRenderTarget(shadowMaskInvertedRender), Vector2.Zero, Color.White); spriteBatch.End(); ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(worldShadowsRender)); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, Effectshadow); spriteBatch.Draw(DisplayController.GetRenderTarget(worldObjectsRender), Vector2.Zero, Color.White); spriteBatch.End(); }
private void DrawGroundLayers(SpriteBatch spriteBatch) { //Draw Ground Layers ScreenController.graphicsDevice.Viewport = camera.viewport; ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(worldObjectsRender)); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.TranslationMatrix(1f, 1f)); world.DrawGroundLayers(spriteBatch, camera.drawPoints, mapObjectsDraw); spriteBatch.End(); //Draw burnt layer if (mapObjectsDraw.IsBurntTiles()) { ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(burntLayerRender)); ScreenController.graphicsDevice.Clear(Color.Transparent); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null, camera.TranslationMatrix(1f, 1f)); mapObjectsDraw.DrawBurntLayer(spriteBatch); spriteBatch.End(); /* //Soften the burnt * ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(burntToSoftenRender)); * spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null); * spriteBatch.Draw(DisplayController.GetRenderTarget(burntLayerRender), Vector2.Zero, Color.White * 0.5f); * spriteBatch.End();*/ //Back to world render ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(worldObjectsRender)); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null); spriteBatch.Draw(DisplayController.GetRenderTarget(burntLayerRender), Vector2.Zero, Color.White * 0.85f); spriteBatch.End(); } }
public void DrawCellRecalculateList() { int i = 0; ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(renderTargetTextureId)); DisplayController.spriteBatch1.Begin(SpriteSortMode.Deferred); while (!redrawQueue.IsEmpty) { if (redrawQueue.TryDequeue(out Point point)) { int cellX = point.X - (xMajor * tilesPerCell); int cellY = point.Y - (yMajor * tilesPerCell); Tile tile = WorldController.world.tileGrid[point.X, point.Y]; Rectangle destination = new Rectangle(cellX * tilePixel, cellY * tilePixel, tilePixel, tilePixel); Color color = GetTileColor(tile); AddLayerDraw(tile, destination, color); AddMapObjectDraw(tile, destination, point.X, point.Y, color); i++; } else { break; } } DisplayController.spriteBatch1.End(); ScreenController.graphicsDevice.SetRenderTarget(null); }
private void InitCreateCell() { //Preparing renderTargetTextureId = DisplayController.AddRenderTarget(cellPixelSize - 1, cellPixelSize - 1, true); ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(renderTargetTextureId)); DisplayController.spriteBatch1.Begin(SpriteSortMode.Deferred); HashSet <MapObject> mapObjectList = new HashSet <MapObject>(); //Adding InitAddTiles(mapObjectList, xMajor, yMajor); //Output sprite = new Sprite(new Rectangle(0, 0, cellPixelSize, cellPixelSize), DisplayController.GetRenderTarget(renderTargetTextureId)); DisplayController.spriteBatch1.End(); ScreenController.graphicsDevice.SetRenderTarget(null); //Debug.WriteLine(next); }
private void DrawLighting(SpriteBatch spriteBatch) { //Building the lighting Map ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(lightingMaskRender)); ScreenController.graphicsDevice.Clear(Color.Black); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, camera.TranslationMatrix(1f, 1f)); mapObjectsDraw.DrawLighting(spriteBatch); spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend); spriteBatch.Draw(backingWhite.texture2D, new Rectangle(0, 0, camera.viewport.Width, camera.viewport.Height), backingWhite.location, Color.White * WorldController.globalBrightness, 0f, Vector2.Zero, SpriteEffects.None, 0f); spriteBatch.End(); //Outputting the lighting map to our final worldRender ScreenController.graphicsDevice.SetRenderTarget(DisplayController.GetRenderTarget(worldLightingRender)); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, Effectlighting); Effectlighting.Parameters["red"].SetValue(WorldController.globalRed); Effectlighting.Parameters["green"].SetValue(WorldController.globalGreen); Effectlighting.Parameters["blue"].SetValue(WorldController.globalBlue); spriteBatch.Draw(DisplayController.GetRenderTarget(worldShadowsRender), Vector2.Zero, Color.White); spriteBatch.End(); }