예제 #1
0
        /// <summary>
        /// Sets up all the common stuff needed for rendering.  This includes
        /// setting the technique and any parameters that don't change from
        /// one batch to the next.
        /// </summary>
        public override void PreRender(Camera camera)
        {
            if (InGame.inGame.renderEffects == InGame.RenderEffect.Normal)
            {
                if (numActiveBleeps > 0)
                {
                    GraphicsDevice device = BokuGame.bokuGame.GraphicsDevice;

                    effect.CurrentTechnique = effect.Techniques[@"BleepPass"];

                    // Set up common rendering values.
                    effect.Parameters["CurrentTime"].SetValue((float)Time.GameTimeTotalSeconds);

                    // Set up world matrix.
                    Matrix worldMatrix         = Matrix.Identity;
                    Matrix worldViewProjMatrix = worldMatrix * camera.ViewProjectionMatrix;

                    effect.Parameters["DiffuseTexture"].SetValue(texture);
                    effect.Parameters["EyeLocation"].SetValue(new Vector4(camera.ActualFrom, 1.0f));
                    effect.Parameters["CameraUp"].SetValue(new Vector4(camera.ViewUp, 1.0f));
                    effect.Parameters["WorldMatrix"].SetValue(worldMatrix);
                    effect.Parameters["WorldViewProjMatrix"].SetValue(worldViewProjMatrix);

                    float   radius     = 0.2f;
                    float   minPix     = 3.0f;
                    float   maxPix     = 6.0f;
                    Vector4 pixelLimit = ShaderGlobals.MakeParticleSizeLimit(radius, minPix, maxPix);
                    effect.Parameters["ParticleRadius"].SetValue(pixelLimit);

                    device.Indices = ibuf;

                    device.SetVertexBuffer(vbuf);
                }
            }
        }
예제 #2
0
        }   // end of SharedSmokeEmitter Update()

        /// <summary>
        /// Sets up all the common stuff needed for rendering.  This includes
        /// setting the technique and any parameters that don't change from
        /// one batch to the next.
        /// </summary>
        public override void PreRender(Camera camera)
        {
            GraphicsDevice device = BokuGame.bokuGame.GraphicsDevice;

            if (InGame.inGame.renderEffects == InGame.RenderEffect.DistortionPass)
            {
                ShaderGlobals.FixExplicitBloom(0.004f);
                effect.CurrentTechnique = effect.Techniques[@"DistortionPass"];
            }
            else
            {
                // Turn off bloom.
                ShaderGlobals.FixExplicitBloom(0.0f);
                effect.CurrentTechnique = effect.Techniques[TechniqueName];
            }

            // Set up common rendering values.
            effect.Parameters["CurrentTime"].SetValue((float)Time.GameTimeTotalSeconds);

            // Set up world matrix.
            Matrix worldMatrix         = Matrix.Identity;
            Matrix worldViewProjMatrix = worldMatrix * camera.ViewProjectionMatrix;

            Vector4 diffuseColor = ShaderGlobals.ParticleTint(false);

            effect.Parameters["DiffuseColor"].SetValue(diffuseColor);
            effect.Parameters["DiffuseTexture"].SetValue(texture);
            effect.Parameters["EyeLocation"].SetValue(new Vector4(camera.ActualFrom, 1.0f));
            effect.Parameters["CameraUp"].SetValue(new Vector4(camera.ViewUp, 1.0f));
            effect.Parameters["WorldMatrix"].SetValue(worldMatrix);
            effect.Parameters["WorldViewProjMatrix"].SetValue(worldViewProjMatrix);
            effect.Parameters["ParticleRadius"].SetValue(
                ShaderGlobals.MakeParticleSizeLimit(1.0f, 0.0f, 200.0f));

            // Cloned from DistortFilter.  Another casualty of the removal of gloabl shader values.
            Vector4 filterScroll   = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
            Vector4 filterScale    = new Vector4(0.5f, 0.5f, 0.5f, 0.5f);
            float   filterStrength = 0.2f;

            effect.Parameters["BumpScroll"].SetValue(filterScroll);
            effect.Parameters["BumpScale"].SetValue(filterScale);
            effect.Parameters["BumpStrength"].SetValue(filterStrength);

            effect.Parameters["DepthTexture"].SetValue(InGame.inGame.EffectsRenderTarget);
            //effect.Parameters["Bump"].SetValue(DistortFilter.BumpTexture);
            effect.Parameters["Bump"].SetValue(DistortionManager.Bump);
            effect.Parameters["DOF_FarPlane"].SetValue(100.0f);

            device.Indices = ibuf;
        }   // end of SharedSmokeEmitter PreRender()
예제 #3
0
        public override void Render(Camera camera)
        {
            if (active && particleList.Count > 0 && (!Texture.IsDisposed))
            {
                // We're getting rendered, set up the shared vertex buffer to suit us.
                UpdateVerts();

                GraphicsDevice device = BokuGame.bokuGame.GraphicsDevice;


                // Get the effect we need.
                Effect effect = manager.Effect2d;

                // Set up common rendering values.
                effect.CurrentTechnique = Technique;

                Vector4 diffuseColor = ShaderGlobals.ParticleTint(IsEmissive);
                diffuseColor *= Color;
                manager.Parameter(ParticleSystemManager.EffectParams2d.DiffuseColor).SetValue(diffuseColor);

                // Set up world matrix.
                Matrix worldMatrix         = Matrix.Identity;
                Matrix worldViewProjMatrix = worldMatrix * camera.ViewProjectionMatrix;

                manager.Parameter(ParticleSystemManager.EffectParams2d.DiffuseTexture).SetValue(Texture);

                manager.Parameter(ParticleSystemManager.EffectParams2d.EyeLocation).SetValue(new Vector4(camera.ActualFrom, 1.0f));
                manager.Parameter(ParticleSystemManager.EffectParams2d.CameraUp).SetValue(new Vector4(camera.ViewUp, 1.0f));

                manager.Parameter(ParticleSystemManager.EffectParams2d.WorldMatrix).SetValue(worldMatrix);
                manager.Parameter(ParticleSystemManager.EffectParams2d.WorldViewProjMatrix).SetValue(worldViewProjMatrix);
                manager.Parameter(ParticleSystemManager.EffectParams2d.TileOffset).SetValue(NumTiles > 0 ? 1.0f / (float)NumTiles : 1.0f);
                manager.Parameter(ParticleSystemManager.EffectParams2d.ParticleRadius).SetValue(
                    ShaderGlobals.MakeParticleSizeLimit(1.0f, 0.0f, 100.0f * endRadius));

                ShaderGlobals.FixExplicitBloom(ExplicitBloom);

                // Render all passes.
                for (int i = 0; i < effect.CurrentTechnique.Passes.Count; i++)
                {
                    EffectPass pass = effect.CurrentTechnique.Passes[i];
                    pass.Apply();
                    device.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, localVerts, 0, particleList.Count * 4, localIndices, 0, particleList.Count * 2);
                }

                ShaderGlobals.ReleaseExplicitBloom();
            } // end of if active
        }     // end of Emitter Render()