示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="renderer"></param>
        /// <param name="writeBuffer"></param>
        /// <param name="readBuffer"></param>
        /// <param name="delta"></param>
        public void Render(WebGLRenderer renderer, WebGLRenderTarget writeBuffer, WebGLRenderTarget readBuffer, float delta)
        {
            if (null != this.Uniforms[this.TextureId])
            {
                this.Uniforms[this.TextureId]["value"] = readBuffer;
            }

            this.quad.Material = this.Material;

            if (this.RenderToScreen)
            {
                renderer.Render(this.scene, this.camera);
            }
            else
            {
                renderer.Render(this.scene, this.camera, writeBuffer, this.Clear);
            }
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="renderer"></param>
        /// <param name="writeBuffer"></param>
        /// <param name="readBuffer"></param>
        /// <param name="delta"></param>
        public void Render(WebGLRenderer renderer, WebGLRenderTarget writeBuffer, WebGLRenderTarget readBuffer, float delta)
        {
            // don't update color or depth

            GL.ColorMask(false, false, false, false);
            GL.DepthMask(false);

            // set up stencil

            int writeValue; int clearValue;

            if (this.Inverse)
            {
                writeValue = 0;
                clearValue = 1;
            }
            else
            {
                writeValue = 1;
                clearValue = 0;
            }

            GL.Enable(EnableCap.StencilTest);
            GL.StencilOp(StencilOp.Replace, StencilOp.Replace, StencilOp.Replace);
            GL.StencilFunc(StencilFunction.Always, writeValue, 0xffffffff);
            GL.ClearStencil(clearValue);

            // draw into the stencil buffer

            renderer.Render(this.scene, this.camera, readBuffer, this.Clear);
            renderer.Render(this.scene, this.camera, writeBuffer, this.Clear);

            // re-enable update of color and depth

            GL.ColorMask(true, true, true, true);
            GL.DepthMask(true);

            // only render where stencil is set to 1

            GL.StencilFunc(StencilFunction.Equal, 1, 0xffffffff);  // draw if == 1
            GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Keep);
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="renderer"></param>
        /// <param name="writeBuffer"></param>
        /// <param name="readBuffer"></param>
        /// <param name="delta"></param>
        public void Render(WebGLRenderer renderer, WebGLRenderTarget writeBuffer, WebGLRenderTarget readBuffer, float delta)
        {
            this.Scene.OverrideMaterial = this.OverrideMaterial;

            if (null != this.ClearColor)
            {
                this.OldClearColor = renderer.ClearColor;
                this.OldClearAlpha = renderer.ClearAlpha;

                renderer.SetClearColor(this.ClearColor.Value, this.ClearAlpha);
            }

            renderer.Render(this.Scene, this.Camera, readBuffer, this.Clear);

            if (null != this.ClearColor)
            {
                renderer.SetClearColor(this.OldClearColor, this.OldClearAlpha);
            }

            this.Scene.OverrideMaterial = null;
        }