Esempio n. 1
0
        public void render(List <GameObject> descs)
        {
            ObjectController controller = WhiskeyControl.Active.ObjectController;

            if (controller != null)
            {
                GraphicsDevice.SetRenderTarget(layerScreenShader);
                GraphicsDevice.Clear(XnaColor.Transparent);

                foreach (CoreLayer layer in Level.Layers)
                {
                    if (!layer.Visible)
                    {
                        continue;
                    }


                    string     shaderMode = layer.ShaderMode;
                    BlendState blendState = BlendModeConverter.getState(layer.BlendMode);
                    if (shaderMode != CoreLayer.DEFAULT_SHADER_MODE && shaderMode != null)
                    {
                        Effect fx = WhiskeyControl.Resources.loadEffect(shaderMode);
                        layer.setEffect(fx);
                    }
                    else
                    {
                        layer.setEffect(null);
                    }

                    string postShaderMode = layer.PostShaderMode;
                    if (postShaderMode != CoreLayer.DEFAULT_SHADER_MODE && postShaderMode != null)
                    {
                        layer.setPostEffect(WhiskeyControl.Resources.loadEffect(postShaderMode));
                    }
                    else
                    {
                        layer.setPostEffect(null);
                    }

                    if (WhiskeyControl.InputManager != null)
                    {
                        Vector mouse = WhiskeyControl.InputManager.MousePosition;
                        mouse.X /= currentLayerTarget.Width;
                        mouse.Y /= currentLayerTarget.Height;
                        Level.ShaderParameters.setVector(ShaderParameters.PARAM_MOUSE_POS, mouse);

                        Vector3 translation = ActiveCamera.TranformMatrix.Translation;
                        translation.X /= currentLayerTarget.Width;
                        translation.Y /= currentLayerTarget.Height;
                        Level.ShaderParameters.setVector(ShaderParameters.PARAM_CAMERA, new Vector(translation.X, translation.Y));
                        Level.ShaderParameters.setFloat(ShaderParameters.PARAM_CAMERA_ZOOM, ActiveCamera.Zoom);
                    }

                    Effect layerEffect = layer.getEffect();
                    Effect post        = layer.getPostEffect();

                    Level.ShaderParameters.updateEffect(layerEffect);
                    Level.ShaderParameters.updateEffect(post);


                    GraphicsDevice.SetRenderTarget(currentLayerTarget);

                    GraphicsDevice.Clear(XnaColor.Transparent);


                    if (layer.ScreenShader)
                    {
                        spriteBatch.Begin(SpriteSortMode.FrontToBack, blendState, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone, layerEffect);
                        spriteBatch.Draw(bloomComponent.SceneTarget, Vector.Zero, XnaColor.White);
                        spriteBatch.End();
                    }
                    else
                    {
                        spriteBatch.Begin(SpriteSortMode.FrontToBack, blendState, SamplerState.LinearWrap, DepthStencilState.Default, RasterizerState.CullNone, layerEffect, CameraTransform);
                        foreach (GameObject gob in descs.Where(g => (g.Layer == null && layer == Level.DefaultLayer) || layer == g.Layer))
                        {
                            if (gob == controller)//|| gob == controller.Selected)
                            {
                                continue;
                            }



                            Vector2 alwaysOnPos = gob.Position;
                            spriteBatch.Draw(alwaysOnSprite.getImage(), alwaysOnPos, null, alwaysOnSprite.Color, alwaysOnSprite.Rotation, alwaysOnSprite.Offset, alwaysOnSprite.Scale, SpriteEffects.None, 0);

                            gob.Bounds.draw(RenderInfo, new RenderHints().setColor(Level.BackgroundColorCompliment));
                            gob.renderImage(RenderInfo);
                        }

                        spriteBatch.End();
                    }



                    GraphicsDevice.SetRenderTarget(layerScreenShader);

                    spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.NonPremultiplied, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone, post);
                    spriteBatch.Draw(currentLayerTarget, Vector.Zero, XnaColor.White);
                    spriteBatch.End();
                }
            }
        }
Esempio n. 2
0
        private void renderLayers()
        {
            GraphicsDevice.SetRenderTarget(layerScreenShader);
            GraphicsDevice.Clear(XnaColor.Transparent);

            foreach (Layer layer in Level.Layers)
            {
                if (!layer.Visible)
                {
                    continue;
                }


                string     shaderMode = layer.ShaderMode;
                BlendState blendState = BlendModeConverter.getState(layer.BlendMode);
                if (shaderMode != Layer.DEFAULT_SHADER_MODE && shaderMode != null)
                {
                    Effect fx = GameManager.Resources.loadEffect(shaderMode);
                    layer.setEffect(fx);
                }
                else
                {
                    layer.setEffect(null);
                }

                string postShaderMode = layer.PostShaderMode;
                if (postShaderMode != Layer.DEFAULT_SHADER_MODE && postShaderMode != null)
                {
                    layer.setPostEffect(GameManager.Resources.loadEffect(postShaderMode));
                }
                else
                {
                    layer.setPostEffect(null);
                }

                Effect layerEffect = layer.getEffect();
                Effect post        = layer.getPostEffect();

                Level.ShaderParameters.updateEffect(layerEffect);
                Level.ShaderParameters.updateEffect(post);


                GraphicsDevice.SetRenderTarget(currentLayerTarget);

                GraphicsDevice.Clear(XnaColor.Transparent);


                if (layer.ScreenShader)
                {
                    spriteBatch.Begin(SpriteSortMode.FrontToBack, blendState, SamplerState.LinearWrap, DepthStencilState.Default, RasterizerState.CullNone, layerEffect);
                    spriteBatch.Draw(bloomComponent.SceneTarget, Vector.Zero, XnaColor.White);
                    spriteBatch.End();
                }
                else
                {
                    spriteBatch.Begin(SpriteSortMode.FrontToBack, blendState, SamplerState.LinearWrap, DepthStencilState.Default, RasterizerState.CullNone, layerEffect, CameraTransform);

                    List <GameObject> allGobs = GameManager.Objects.getAllObjects();
                    Convex.begin();
                    foreach (GameObject gob in allGobs.Where(g => g.Active && !g.HudObject && g.Layer.Name.Equals(layer.Name)))
                    {
                        gob.renderImage(RenderInfo);
                    }


                    spriteBatch.End();

                    //  RenderTarget2D primTarget = checkRenderTarget(null, GraphicsDevice.PresentationParameters.BackBufferWidth, GraphicsDevice.PresentationParameters.BackBufferHeight);
                    //  GraphicsDevice.SetRenderTarget(primTarget);
                    BlendState bs = BlendState.AlphaBlend;

                    GraphicsDevice.BlendState = bs;
                    PrimitiveBatch.getInstance(GraphicsDevice).CurrentLayer = layer;
                    Convex.readyToBeDrawn.ForEach(c =>
                    {
                        c.Convex.render(c.GraphcisDevice, c.Transform, c.Hints);
                    });
                    // GraphicsDevice.SetRenderTarget(currentLayerTarget);
                    // spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.NonPremultiplied, SamplerState.LinearWrap, DepthStencilState.Default, RasterizerState.CullNone, null);
                    // spriteBatch.Draw(primTarget, Vector.Zero, XnaColor.White);
                    // spriteBatch.End();
                }

                GraphicsDevice.SetRenderTarget(layerScreenShader);

                spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.NonPremultiplied, SamplerState.LinearWrap, DepthStencilState.Default, RasterizerState.CullNone, post);
                spriteBatch.Draw(currentLayerTarget, Vector.Zero, XnaColor.White);
                spriteBatch.End();
            }
        }