posteffect.monkey2 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. Namespace mojo3d
  2. #rem monkeydoc The PostEffect class.
  3. #end
  4. Class PostEffect
  5. #rem monkeydoc Enabled state.
  6. Set to true to enable this effect and false to disable.
  7. #end
  8. Property Enabled:Bool()
  9. Return _enabled
  10. Setter( enabled:Bool )
  11. _enabled=enabled
  12. End
  13. #rem monkeydoc @hidden
  14. #end
  15. Method Render()
  16. UpdateSourceUniforms()
  17. OnRender( _gdevice.RenderTarget,_gdevice.Viewport )
  18. End
  19. Function BeginRendering( gdevice:GraphicsDevice,runiforms:UniformBlock )
  20. _gdevice=gdevice
  21. _runiforms=runiforms
  22. End
  23. Function EndRendering()
  24. _gdevice=Null
  25. _runiforms=Null
  26. End
  27. Protected
  28. #rem monkeydoc @hidden
  29. #end
  30. Method OnRender( target:RenderTarget,viewport:Recti ) Abstract
  31. Property Device:GraphicsDevice()
  32. Return _gdevice
  33. End
  34. Property Uniforms:UniformBlock()
  35. Return _runiforms
  36. End
  37. Property SourceBufferSize:Vec2f()
  38. Return _sourceBufferSize
  39. End
  40. Property SourceBufferScale:Vec2f()
  41. Return _sourceBufferScale
  42. End
  43. Method CreateRenderTarget:RenderTarget( size:Vec2i,format:PixelFormat,flags:TextureFlags )
  44. Local texture:=New Texture( size.x,size.y,format,flags )
  45. Local target:=New RenderTarget( New Texture[]( texture ),Null )
  46. Return target
  47. End
  48. Method SetRenderTarget( target:RenderTarget,viewport:Recti )
  49. UpdateSourceUniforms()
  50. _gdevice.RenderTarget=target
  51. _gdevice.Viewport=viewport
  52. End
  53. Method RenderQuad()
  54. Global _vertices:VertexBuffer
  55. If Not _vertices
  56. _vertices=New VertexBuffer( New Vertex3f[](
  57. New Vertex3f( 0,1,0 ),
  58. New Vertex3f( 1,1,0 ),
  59. New Vertex3f( 1,0,0 ),
  60. New Vertex3f( 0,0,0 ) ) )
  61. Endif
  62. _gdevice.VertexBuffer=_vertices
  63. _gdevice.Render( 4,1 )
  64. End
  65. #rem monkeydoc @hidden
  66. #end
  67. Private
  68. Global _gdevice:GraphicsDevice
  69. Global _runiforms:UniformBlock
  70. Global _sourceBufferSize:Vec2f
  71. Global _sourceBufferScale:Vec2f
  72. Field _enabled:Bool=True
  73. Function UpdateSourceUniforms()
  74. Local rsize:=_gdevice.Viewport.Size
  75. Local rtarget:=_gdevice.RenderTarget
  76. Local rtexture:=rtarget.GetColorTexture( 0 )
  77. _sourceBufferSize=Cast<Vec2f>( rtexture.Size )
  78. _sourceBufferScale=Cast<Vec2f>( rsize )/Cast<Vec2f>( rtexture.Size )
  79. _runiforms.SetTexture( "SourceBuffer",rtexture )
  80. _runiforms.SetVec2f( "SourceBufferSize",_sourceBufferSize )
  81. _runiforms.SetVec2f( "SourceBufferScale",_sourceBufferScale )
  82. End
  83. End