示例#1
0
        }         // Show()

        #endregion

        #region Unit Testing
#if DEBUG
        /// <summary>
        /// Test post screen glow
        /// </summary>
        public static void TestPostScreenGlow()
        {
            Model          testModel  = null;
            PostScreenGlow glowShader = null;

            TestGame.Start("TestPostScreenGlow",
                           delegate
            {
                testModel  = new Model("Asteroid2");
                glowShader = new PostScreenGlow();
            },
                           delegate
            {
                //Thread.Sleep(10);

                glowShader.Start();

                BaseGame.skyCube.RenderSky();

                testModel.Render(Vector3.Zero);
                BaseGame.MeshRenderManager.Render();

                if (Input.Keyboard.IsKeyDown(Keys.LeftAlt) == false &&
                    Input.GamePadAPressed == false)
                {
                    glowShader.Show();
                }
                else
                {
                    // Resolve first
                    glowShader.sceneMapTexture.Resolve(false);
                    started = false;

                    // Reset background buffer
                    RenderToTexture.ResetRenderTarget(true);
                    // Just show scene map
                    glowShader.sceneMapTexture.RenderOnScreen(BaseGame.ResolutionRect);
                }                         // else

                TextureFont.WriteText(2, 30,
                                      "Press left alt or A to just show the unchanged screen.");
                TextureFont.WriteText(2, 60,
                                      "Press space or B to see all menu post screen render passes.");

                //*TODO
                if (Input.Keyboard.IsKeyDown(Keys.Space) ||                        // == false)
                    Input.GamePadBPressed)
                {
                    glowShader.sceneMapTexture.RenderOnScreen(
                        new Rectangle(10, 10, 256, 256));
                    glowShader.downsampleMapTexture.RenderOnScreen(
                        new Rectangle(10 + 256 + 10, 10, 256, 256));
                    glowShader.blurMap1Texture.RenderOnScreen(
                        new Rectangle(10 + 256 + 10 + 256 + 10, 10, 256, 256));
                    glowShader.blurMap2Texture.RenderOnScreen(
                        new Rectangle(10, 10 + 256 + 10, 256, 256));
                } // if (Input.Keyboard.IsKeyDown)
            });
        }         // TestPostScreenGlow()
		} // BaseGame()

		/// <summary>
		/// Initialize
		/// </summary>
		protected override void Initialize()
		{
#if !XBOX360
			// Add screenshot capturer. Works only on windows platform.
			// Note: Don't do this in constructor,
			// we need the correct window name for screenshots!
			this.Components.Add(new ScreenshotCapturer(this));
#endif

			// Remember device
			device = graphics.GraphicsDevice;

			// Remember resolution
			width = graphics.GraphicsDevice.Viewport.Width;
			height = graphics.GraphicsDevice.Viewport.Height;

			// It is very important that we initialize the render to texture
			// stuff, e.g. the remDepthBuffer variable needs to be set.
			RenderToTexture.InitializeDepthBufferFormatAndMultisampling(
				graphics.PreferredDepthStencilFormat);

			// Update resolution if it changes and restore device after it was lost
			Window.ClientSizeChanged += new EventHandler(Window_ClientSizeChanged);
			graphics.DeviceReset += new EventHandler(graphics_DeviceReset);
			graphics_DeviceReset(null, EventArgs.Empty);
			
			// Create matrices for our shaders, this makes it much easier to manage
			// all the required matrices and we have to do this ourselfs since there
			// is no fixed function support and theirfore no Device.Transform class.
			WorldMatrix = Matrix.Identity;
			aspectRatio = (float)width / (float)height;
			ProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(
				FieldOfView, aspectRatio, NearPlane, FarPlane);

			// ViewMatrix is updated in camera class
			ViewMatrix = Matrix.CreateLookAt(
				new Vector3(0, 0, 15), Vector3.Zero, Vector3.Up);
			
			// Init global manager classes, which will be used all over the place ^^
			lineManager2D = new LineManager2D();
			lineManager3D = new LineManager3D();
			// Create font
			font = new TextureFont();

			// Make sure we can use PS1 or PS2, see UsePS and UsePS20
			if (device.GraphicsDeviceCapabilities.PixelShaderVersion.Major >= 2 &&
				GameSettings.Default.PerformanceSettings < 2)
				GameSettings.Default.PerformanceSettings = 2;
			else if (
				device.GraphicsDeviceCapabilities.PixelShaderVersion.Major >= 1 &&
				GameSettings.Default.PerformanceSettings < 1)
				GameSettings.Default.PerformanceSettings = 1;

			// Init post screen glow
			glowShader = new PostScreenGlow();
			skyCube = new PreScreenSkyCubeMapping();
			lensFlare = new LensFlare(LensFlare.DefaultSunPos);
			ParallaxShader = new ParallaxShader();

			base.Initialize();
		} // Initialize()
 /// <summary>
 /// Dispose
 /// </summary>
 /// <param name="someObject">Some object</param>
 public static void Dispose(ref PostScreenGlow someObject)
 {
     if (someObject != null)
         someObject.Dispose();
     someObject = null;
 }
        /// <summary>
        /// Test post screen glow
        /// </summary>
        public static void TestPostScreenGlow()
        {
            Model testModel = null;
            PostScreenGlow glowShader = null;

            TestGame.Start("TestPostScreenGlow",
                delegate
                {
                    testModel = new Model("Asteroid2");
                    glowShader = new PostScreenGlow();
                },
                delegate
                {
                    //Thread.Sleep(10);

                    glowShader.Start();

                    BaseGame.skyCube.RenderSky();

                    testModel.Render(Vector3.Zero);
                    BaseGame.MeshRenderManager.Render();

                    if (Input.Keyboard.IsKeyDown(Keys.LeftAlt) == false &&
                        Input.GamePadAPressed == false)
                        glowShader.Show();
                    else
                    {
                        // Resolve first
                        glowShader.sceneMapTexture.Resolve(false);
                        started = false;

                        // Reset background buffer
                        RenderToTexture.ResetRenderTarget(true);
                        // Just show scene map
                        glowShader.sceneMapTexture.RenderOnScreen(BaseGame.ResolutionRect);
                    } // else

                    TextureFont.WriteText(2, 30,
                        "Press left alt or A to just show the unchanged screen.");
                    TextureFont.WriteText(2, 60,
                        "Press space or B to see all menu post screen render passes.");

                    //*TODO
                    if (Input.Keyboard.IsKeyDown(Keys.Space) ||// == false)
                        Input.GamePadBPressed)
                    {
                        glowShader.sceneMapTexture.RenderOnScreen(
                            new Rectangle(10, 10, 256, 256));
                        glowShader.downsampleMapTexture.RenderOnScreen(
                            new Rectangle(10 + 256 + 10, 10, 256, 256));
                        glowShader.blurMap1Texture.RenderOnScreen(
                            new Rectangle(10 + 256 + 10 + 256 + 10, 10, 256, 256));
                        glowShader.blurMap2Texture.RenderOnScreen(
                            new Rectangle(10, 10 + 256 + 10, 256, 256));
                    } // if (Input.Keyboard.IsKeyDown)
                });
        }