92 lines
3.0 KiB
VB.net
92 lines
3.0 KiB
VB.net
|
Namespace Resources.Blur
|
|||
|
|
|||
|
Public Class BlurHandler
|
|||
|
|
|||
|
Implements IDisposable
|
|||
|
|
|||
|
Private Const BLUR_RADIUS As Integer = 7
|
|||
|
Private Const BLUR_AMOUNT As Single = 2.0F
|
|||
|
|
|||
|
Private _blurCore As GaussianBlur
|
|||
|
Private _batch As SpriteBatch
|
|||
|
Private _rt1 As RenderTarget2D
|
|||
|
Private _rt2 As RenderTarget2D
|
|||
|
|
|||
|
Private _isDisposed As Boolean = False
|
|||
|
|
|||
|
Public Property IsDisposed As Boolean
|
|||
|
Get
|
|||
|
Return _isDisposed
|
|||
|
End Get
|
|||
|
Private Set(value As Boolean)
|
|||
|
_isDisposed = value
|
|||
|
End Set
|
|||
|
End Property
|
|||
|
|
|||
|
Public Sub New(width As Integer, height As Integer)
|
|||
|
Me.New(Core.Content.Load(Of Effect)("Effects\GaussianBlur"), New SpriteBatch(Core.GraphicsDevice), width, height)
|
|||
|
End Sub
|
|||
|
|
|||
|
Public Sub New(gaussianBlurEffect As Effect, batch As SpriteBatch, width As Integer, height As Integer)
|
|||
|
_batch = batch
|
|||
|
|
|||
|
_blurCore = New GaussianBlur(gaussianBlurEffect)
|
|||
|
_blurCore.ComputeKernel(BLUR_RADIUS, BLUR_AMOUNT)
|
|||
|
|
|||
|
Dim renderTargetWidth = CInt(width / 2)
|
|||
|
Dim renderTargetHeight = CInt(height / 2)
|
|||
|
|
|||
|
_rt1 = New RenderTarget2D(Core.GraphicsDevice, renderTargetWidth, renderTargetHeight, False,
|
|||
|
Core.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.None)
|
|||
|
_rt2 = New RenderTarget2D(Core.GraphicsDevice, renderTargetWidth, renderTargetHeight, False,
|
|||
|
Core.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.None)
|
|||
|
|
|||
|
_blurCore.ComputeOffsets(renderTargetWidth, renderTargetHeight)
|
|||
|
End Sub
|
|||
|
|
|||
|
Public Function Perform(texture As Texture2D) As Texture2D
|
|||
|
Return _blurCore.PerformGaussianBlur(texture, _rt1, _rt2)
|
|||
|
End Function
|
|||
|
|
|||
|
Public Sub Dispose() Implements IDisposable.Dispose
|
|||
|
Dispose(True)
|
|||
|
End Sub
|
|||
|
|
|||
|
Protected Overrides Sub Finalize()
|
|||
|
Dispose(False)
|
|||
|
End Sub
|
|||
|
|
|||
|
Private Sub Dispose(disposing As Boolean)
|
|||
|
If Not IsDisposed Then
|
|||
|
|
|||
|
If disposing Then
|
|||
|
|
|||
|
If _rt1 IsNot Nothing AndAlso Not _rt1.IsDisposed Then
|
|||
|
_rt1.Dispose()
|
|||
|
End If
|
|||
|
If _rt2 IsNot Nothing AndAlso Not _rt2.IsDisposed Then
|
|||
|
_rt2.Dispose()
|
|||
|
End If
|
|||
|
If _blurCore IsNot Nothing AndAlso Not _blurCore.IsDisposed Then
|
|||
|
_blurCore.Dispose()
|
|||
|
End If
|
|||
|
If _batch IsNot Nothing AndAlso Not _batch.IsDisposed Then
|
|||
|
_batch.Dispose()
|
|||
|
End If
|
|||
|
|
|||
|
End If
|
|||
|
|
|||
|
_rt1 = Nothing
|
|||
|
_rt2 = Nothing
|
|||
|
_blurCore = Nothing
|
|||
|
_batch = Nothing
|
|||
|
|
|||
|
IsDisposed = True
|
|||
|
|
|||
|
End If
|
|||
|
End Sub
|
|||
|
|
|||
|
End Class
|
|||
|
|
|||
|
End Namespace
|