1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- Namespace mojo3d
- #rem The BloomEffect class.
- This class implements a 'bloom' post processing effect.
- #end
- Class BloomEffect Extends PostEffect
-
- #rem monkeydoc Creates a new bloom effect.
- #end
- Method New( passes:Int=2 )
-
- _shader=Shader.Open( "effects/bloom" )
-
- _uniforms=New UniformBlock( 3 )
-
- Passes=passes
- End
-
- #rem monkeydoc The number of passes.
-
- Must be an even number greater than 0.
-
- #end
- Property Passes:Int()
-
- Return _passes
-
- Setter( passes:Int )
- Assert( passes>0 And (passes&1)=0,"BloomEffect passes must be even and >0" )
-
- _passes=passes
- End
-
- Protected
-
- Method OnRender( target:RenderTarget,viewport:Recti ) Override
-
- Local size:=viewport.Size
- Local source:=target.GetColorTexture( 0 )
-
- If Not _target0 Or size.x>_target0.Size.x Or size.y>_target0.Size.y
- _target0=CreateRenderTarget( size,source.Format,TextureFlags.Dynamic )
- _target1=CreateRenderTarget( size,source.Format,TextureFlags.Dynamic )
- Endif
-
- Device.Shader=_shader
- Device.BindUniformBlock( _uniforms )
-
- Local rtarget:=_target0
-
- For Local i:=0 Until _passes
-
- Super.SetRenderTarget( rtarget,New Recti( 0,0,size ) )
- Device.RenderPass=i ? 2-(i&1) Else 0 '0,1,2,1,2,1,2...
-
- RenderQuad()
-
- rtarget=rtarget=_target0 ? _target1 Else _target0
- Next
-
- Super.SetRenderTarget( target,viewport )
-
- Device.BlendMode=BlendMode.Additive
- Device.RenderPass=3
-
- RenderQuad()
- End
-
- Private
-
- Field _shader:Shader
- Field _uniforms:UniformBlock
- Field _passes:Int=4
- Field _target0:RenderTarget
- Field _target1:RenderTarget
-
- End
|