/// <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); } }
/// <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); }
/// <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; }