Beispiel #1
0
        /// <summary>
        /// Method to do the deferred lighting draw call
        /// </summary>
        /// <param name="camera"></param>
        public void DrawDeferred(DeferredLightingCamera camera)
        {
            GraphicsDevice.Clear(camera.ClearColor);

            if (deferredSceneRenderEffect == null)
            {
                deferredSceneRenderEffect = Game.Content.Load <Effect>("Shaders/DeferredRender/DeferredSceneRender");
            }

            deferredSceneRenderEffect.Parameters["colorMap"].SetValue(camera.RenderTarget);
            deferredSceneRenderEffect.Parameters["lightMap"].SetValue(lightMap);
            //deferredSceneRenderEffect.Parameters["sgrMap"].SetValue(camera.SpecularGlowReflectionMap);

            GraphicsDevice.BlendState        = BlendState.Opaque;
            GraphicsDevice.DepthStencilState = DepthStencilState.Default;
            GraphicsDevice.RasterizerState   = RasterizerState.CullCounterClockwise;
            GraphicsDevice.SamplerStates[0]  = SamplerState.LinearWrap;

            deferredSceneRenderEffect.CurrentTechnique.Passes[0].Apply();

            if (sceneQuad == null)
            {
                sceneQuad = new ScreenQuad(Game);
                sceneQuad.Initialize();
            }

            sceneQuad.Draw(-Vector2.One, Vector2.One);
        }
Beispiel #2
0
        public virtual void Draw(GameTime gameTime)
        {
            if (Enabled)
            {
                if (sq == null)
                {
                    sq = new ScreenQuad(Game);
                    sq.Initialize();
                }
                if (!UsesVertexShader)
                {
                    spriteBatch.Begin(SortMode, Blend, Sampler, DepthStencilState.None, RasterizerState.CullCounterClockwise);
                }
                else
                {
                    Game.GraphicsDevice.SamplerStates[0] = Sampler;
                }

                effect.CurrentTechnique.Passes[0].Apply();

                if (UsesVertexShader)
                {
                    sq.Draw(-Vector2.One, Vector2.One);
                }
                else
                {
                    spriteBatch.Draw(BackBuffer, new Rectangle(0, 0, Game.GraphicsDevice.Viewport.Width, Game.GraphicsDevice.Viewport.Height), Color.White);
                    spriteBatch.End();
                }
            }
        }
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            base.Initialize();

            AssetManager = new AssetManager();

            PackageManager = new PackageManager();
            // "AlkaronContent" must be initialized before calling this, because
            // BuildPackageMap depends on it.
            PackageManager.BuildPackageMap();

            SceneManager = new SceneManager(GraphicsDevice);

            ScreenQuad.Initialize(SceneManager);
            Graphics2D.Texture.SingleWhite = new Graphics2D.Texture(SceneManager, 1, 1, new byte[] { 255, 255, 255, 255 });

            DefaultFont = Content.Load <SpriteFont>("DefaultFont");
            SceneManager.PrimitiveRenderManager.EngineFont = DefaultFont;

            RasterizerState rasterizerState = new RasterizerState();

            rasterizerState.CullMode = CullMode.CullClockwiseFace;

            GraphicsDevice.RasterizerState = rasterizerState;
        }
        public void ClientSizeChanged()
        {
            lock (lockObj)
            {
                CurrentScene?.ClientSizeChanged();

                ScreenQuad.RenderConfigDidUpdate();
            }
        }
Beispiel #5
0
        private void PostConstructor()
        {
            if (_postConstructor)
            {
                _buffer = ScreenQuad.GetScreenQuadBuffer();

                _shader          = PoolProxy.GetResource <ObtainShaderPool, ShaderAllocationPolicy <UiFrameShader>, string, UiFrameShader>(ProjectFolders.ShadersPath + "uiVS.glsl," + ProjectFolders.ShadersPath + "uiFS.glsl");
                _postConstructor = false;
            }
        }
Beispiel #6
0
 private void InitD3D()
 {
     cDev = new ControlDevice(EmptyControl);
     MakeMipTexture();
     MakeIntermediateTexture();
     MakeCpuTexture();
     ScreenQuad.Init(cDev.device);
     passThroughFilter = new PassThroughFilter(cDev.device);
     screenCapture     = new ScreenCapture(cDev.device);
     StartRenderLoop();
 }
Beispiel #7
0
 public void Cleanup(object sender, EventArgs e)
 {
     if (!base.DesignMode)
     {
         StopRenderLoop();
         ScreenQuad.Dispose();
         passThroughFilter.Dispose();
         screenCapture.Dispose();
         cDev.Dispose();
     }
 }
Beispiel #8
0
    System.Media.SoundPlayer sound;                                                                         // for music

    // initialize
    public void Init()
    {
        // load meshes
        teapot   = new Mesh("../../assets/teapot.obj");
        floor    = new Mesh("../../assets/floor.obj");
        city     = new Mesh("../../assets/city.obj");
        scraper  = new Mesh("../../assets/scraper.obj");
        mountain = new Mesh("../../assets/mountain.obj");
        moon     = new Mesh("../../assets/moon.obj");
        // initialize stopwatch
        timer = new Stopwatch();
        timer.Reset();
        timer.Start();
        // create shaders
        shader    = new Shader("../../shaders/vs.glsl", "../../shaders/fs.glsl");
        skyshader = new Shader("../../shaders/vs_skydome.glsl", "../../shaders/fs_skydome.glsl");
        postproc  = new Shader("../../shaders/vs_post.glsl", "../../shaders/fs_post.glsl");
        // load the textures
        wood       = new Texture("../../assets/wood.jpg");
        skytex     = new Texture("../../assets/space.jpg");
        windows    = new Texture("../../assets/city.jpg");
        asphalt    = new Texture("../../assets/asphalt.jpg");
        skyscraper = new Texture("../../assets/skyscraper.jpg");
        mnt        = new Texture("../../assets/grass.jpg");
        planet     = new Texture("../../assets/moon.jpg");
        // create the render target
        target = new RenderTarget(screen.width, screen.height);
        quad   = new ScreenQuad();
        // create scenegraph and main object
        sceneGraph = new SceneGraph();
        teapots    = new List <SceneObject>();
        // initialize matrices
        cameraMatrix = Matrix4.Identity;
        worldMatrix  = Matrix4.CreateFromAxisAngle(new Vector3(0, 1, 0), a);
        rotation     = Matrix4.Identity; //no rotation at the beginning
        // ambient light preparation
        int ambientID = GL.GetUniformLocation(shader.programID, "ambientColor");

        GL.UseProgram(shader.programID);
        GL.Uniform3(ambientID, 0.25f, 0.25f, 0.25f);
        // prepare sound
        sound = new System.Media.SoundPlayer();
        sound.SoundLocation = "../../assets/ori.wav";
        sound.LoadAsync();
        sound.PlayLooping();
        // prepare scene
        CreateScene();
    }
Beispiel #9
0
        /// <summary>
        /// Render a cone light
        /// </summary>
        /// <param name="camera"></param>
        /// <param name="coneLight"></param>
        public void RenderConeLight(DeferredLightingCamera camera, DeferredConeLight coneLight)
        {
            if (deferredConeLightEffect == null)
            {
                deferredConeLightEffect = Game.Content.Load <Effect>("Shaders/DeferredRender/DeferredConeLight");
            }

            // Load Light parameters
            deferredConeLightEffect.Parameters["lightDirection"].SetValue(coneLight.Direction);
            deferredConeLightEffect.Parameters["LightPosition"].SetValue(coneLight.Transform.Position);
            deferredConeLightEffect.Parameters["Color"].SetValue(coneLight.Color.ToVector3());

            deferredConeLightEffect.Parameters["ViewProjectionInv"].SetValue(Matrix.Invert(camera.View * camera.Projection));
            deferredConeLightEffect.Parameters["LightViewProjection"].SetValue(coneLight.View * coneLight.Projection);

            deferredConeLightEffect.Parameters["CameraPosition"].SetValue(camera.Transform.Position);
            deferredConeLightEffect.Parameters["sgrMap"].SetValue(camera.SpecularGlowReflectionMap);
            deferredConeLightEffect.Parameters["normalMap"].SetValue(camera.NormalBuffer);
            deferredConeLightEffect.Parameters["depthMap"].SetValue(camera.DepthBuffer);
            deferredConeLightEffect.Parameters["power"].SetValue(coneLight.Intensity);

            deferredConeLightEffect.Parameters["ConeAngle"].SetValue(coneLight.Angle);
            deferredConeLightEffect.Parameters["ConeDecay"].SetValue(coneLight.Decay);

            deferredConeLightEffect.Parameters["CastShadow"].SetValue(coneLight.CastShadow);
            if (coneLight.CastShadow)
            {
                deferredConeLightEffect.Parameters["shadowMap"].SetValue(coneLight.ShadowMap);
                deferredConeLightEffect.Parameters["mod"].SetValue(deferredConeShadowMapMod);
                deferredConeLightEffect.Parameters["DiscRadius"].SetValue(1.5f);
                deferredConeLightEffect.Parameters["hardShadows"].SetValue(coneLight.HardShadows);

                deferredConeLightEffect.Parameters["Taps"].SetValue(taps);
            }

            deferredConeLightEffect.CurrentTechnique.Passes[0].Apply();
            // Set sampler state to Point as the Surface type requires it in XNA 4.0
            GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;

            if (sceneQuad == null)
            {
                sceneQuad = new ScreenQuad(Game);
                sceneQuad.Initialize();
            }

            sceneQuad.Draw(-Vector2.One, Vector2.One);
        }
Beispiel #10
0
        /// <summary>
        /// Apply the glow map
        /// </summary>
        /// <param name="camera"></param>
        public void ApplyGlowMap(DeferredLightingCamera camera)
        {
            if (glowMapToLightMapEffect == null)
            {
                glowMapToLightMapEffect = Game.Content.Load <Effect>("Shaders/DeferredRender/GlowMapToLightMapShader");
            }

            glowMapToLightMapEffect.Parameters["sgrMap"].SetValue(camera.SpecularGlowReflectionMap);

            glowMapToLightMapEffect.Techniques[0].Passes[0].Apply();

            if (sceneQuad == null)
            {
                sceneQuad = new ScreenQuad(Game);
                sceneQuad.Initialize();
            }

            sceneQuad.Draw(-Vector2.One, Vector2.One);
        }
Beispiel #11
0
        /// <summary>
        /// Render a directional light.
        /// </summary>
        /// <param name="camera"></param>
        /// <param name="directionalLight"></param>
        public void RenderDirectionalLight(DeferredLightingCamera camera, DeferredDirectionalLight directionalLight)
        {
            if (deferredDirectionalLightEffect == null)
            {
                deferredDirectionalLightEffect = Game.Content.Load <Effect>("Shaders/DeferredRender/DeferredDirectionalLight");
            }

            // Call lighting methods.
            deferredDirectionalLightEffect.Parameters["lightDirection"].SetValue(directionalLight.Direction);
            deferredDirectionalLightEffect.Parameters["Color"].SetValue(directionalLight.Color.ToVector3());
            deferredDirectionalLightEffect.Parameters["power"].SetValue(directionalLight.Intensity);

            deferredDirectionalLightEffect.Parameters["CameraPosition"].SetValue(camera.Transform.Position);
            deferredDirectionalLightEffect.Parameters["sgrMap"].SetValue(camera.SpecularGlowReflectionMap);
            deferredDirectionalLightEffect.Parameters["normalMap"].SetValue(camera.NormalBuffer);
            deferredDirectionalLightEffect.Parameters["depthMap"].SetValue(camera.DepthBuffer);

            deferredDirectionalLightEffect.Parameters["CastShadow"].SetValue(directionalLight.CastShadow);
            if (directionalLight.CastShadow)
            {
                deferredDirectionalLightEffect.Parameters["shadowMap"].SetValue(directionalLight.ShadowMap);
                deferredDirectionalLightEffect.Parameters["mod"].SetValue(deferredDirectionalShadowMapMod);
                deferredDirectionalLightEffect.Parameters["hardShadows"].SetValue(directionalLight.HardShadows);

                deferredDirectionalLightEffect.Parameters["DiscRadius"].SetValue(1f);

                deferredDirectionalLightEffect.Parameters["Taps"].SetValue(taps);
            }
            deferredDirectionalLightEffect.Parameters["viewProjectionInv"].SetValue(Matrix.Invert(camera.View * camera.Projection));
            deferredDirectionalLightEffect.Parameters["lightViewProjection"].SetValue(directionalLight.View * directionalLight.Projection);



            deferredDirectionalLightEffect.Techniques[0].Passes[0].Apply();

            if (sceneQuad == null)
            {
                sceneQuad = new ScreenQuad(Game);
                sceneQuad.Initialize();
            }

            sceneQuad.Draw(-Vector2.One, Vector2.One);
        }
Beispiel #12
0
    public void Init()
    {
        music = new SoundPlayer("../../assets/DejaVu.wav");
        music.PlayLooping();
        LoadTextures();
        LoadMeshes();
        //set specularity of each mesh
        teapot.specularity = 20;
        floor.specularity  = 200;
        car.specularity    = 10;

        shader   = new Shader("../../shaders/vs.glsl", "../../shaders/fs.glsl");
        postproc = new Shader("../../shaders/vs_post.glsl", "../../shaders/fs_post.glsl");

        quad  = new ScreenQuad();
        timer = new Stopwatch();
        timer.Reset();
        timer.Start();

        // create the render target
        target = new RenderTarget(screen.width, screen.height);

        // pass cameraposition to fragment shader
        camID = GL.GetUniformLocation(shader.programID, "campos");
        GL.UseProgram(shader.programID);
        GL.Uniform3(camID, 0, 0, 0);

        // pass lightposition to fragment shader
        lightID = GL.GetUniformLocation(shader.programID, "lightPos");
        GL.UseProgram(shader.programID);
        GL.Uniform3(lightID, lightpos3); //-z is van de camera af

        root        = new Node(shader, null, null, false);
        root.localM = Matrix4.Identity;
        CreateChildren();
    }
Beispiel #13
0
 public PostProcessBase()
 {
     blurWidthChanged = true;
     bPostConstructor = true;
     quadBuffer       = ScreenQuad.GetScreenQuadBuffer();
 }