private void genBloom(fx_Quad quad, fx_Special special) { // Blur bloom texture at multiple levels of detail and combine for noice effect GL.Enable(EnableCap.Blend); GL.BlendEquation(BlendEquationMode.FuncAdd); GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.One); special.blur_Gauss(quad, 40, _tBloom, _fLens, DrawBuffersEnum.ColorAttachment0, 1); special.blur_Gauss(quad, 40, _tBloom, _fLens, DrawBuffersEnum.ColorAttachment0, 0.5f); special.blur_Gauss(quad, 40, _tBloom, _fLens, DrawBuffersEnum.ColorAttachment0, 0.25f); special.blur_Gauss(quad, 40, _tBloom, _fLens, DrawBuffersEnum.ColorAttachment0, 0.125f); GL.Disable(EnableCap.Blend); }
private void genFlare(fx_Quad quad, fx_Special special) { _fLens.bind(DrawBuffersEnum.ColorAttachment1); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Viewport(0, 0, _tFlare.width, _tFlare.height); _pFlare.bind(); _tBloom.bind(_pFlare.getSamplerUniform(0), 0); _iLensColor.bind(_pFlare.getSamplerUniform(1), 1); quad.render(); //special.blur_MovingAverage(15, _tFlare); special.blur_Gauss(quad, 75, _tFlare, _fLens, DrawBuffersEnum.ColorAttachment1); }
//------------------------------------------------------ // COC //------------------------------------------------------ private void genCOC(fx_Quad quad, fx_Special special, Texture depth_texture) { //------------------------------------------------------ // Calculate COC //------------------------------------------------------ _fHalfResolution.bind(new DrawBuffersEnum[] { DrawBuffersEnum.ColorAttachment0, DrawBuffersEnum.ColorAttachment1, DrawBuffersEnum.ColorAttachment2 }); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Viewport(0, 0, _tCOC.width, _tCOC.height); _pCOC.bind(); _ssboAutoFocus.bind(0); depth_texture.bind(_pCOC.getSamplerUniform(0), 0); GL.Uniform1(_pCOC.getUniform("PPM"), _PPM); GL.Uniform1(_pCOC.getUniform("focus_length"), _focus_length); GL.Uniform1(_pCOC.getUniform("fStop"), _fStop); GL.Uniform1(_pCOC.getUniform("max_blur"), _max_blur); quad.render(); special.blur_Gauss(quad, 60, _tCOC_Foreground_Blurred, _fHalfResolution, DrawBuffersEnum.ColorAttachment1); //------------------------------------------------------ // Fix COC //------------------------------------------------------ _fHalfResolution.bind(new DrawBuffersEnum[] { DrawBuffersEnum.ColorAttachment3, }); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Viewport(0, 0, _tCOC.width, _tCOC.height); _pCOC_Fix.bind(); _tCOC_Foreground.bind(_pCOC_Fix.getSamplerUniform(0), 0); _tCOC_Foreground_Blurred.bind(_pCOC_Fix.getSamplerUniform(1), 1); quad.render(); special.blur_Gauss(quad, 10, _tCOC_Foreground_Final, _fHalfResolution, DrawBuffersEnum.ColorAttachment3); //------------------------------------------------------ // Combine COC //------------------------------------------------------ _fFullResoution.bind(new DrawBuffersEnum[] { DrawBuffersEnum.ColorAttachment0, }); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Viewport(0, 0, _tCOC_Final.width, _tCOC_Final.height); _pCOC_Combine.bind(); _tCOC.bind(_pCOC_Combine.getSamplerUniform(0), 0); _tCOC_Foreground_Final.bind(_pCOC_Combine.getSamplerUniform(1), 1); quad.render(); }