/// <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); }
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(); } }
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; } }
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(); }
public void Cleanup(object sender, EventArgs e) { if (!base.DesignMode) { StopRenderLoop(); ScreenQuad.Dispose(); passThroughFilter.Dispose(); screenCapture.Dispose(); cDev.Dispose(); } }
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(); }
/// <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); }
/// <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); }
/// <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); }
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(); }
public PostProcessBase() { blurWidthChanged = true; bPostConstructor = true; quadBuffer = ScreenQuad.GetScreenQuadBuffer(); }