
local _Material			= Material( "pp/sharpen" )
_Material:SetMaterialTexture( "$fbtexture", render.GetScreenEffectTexture() )

/*---------------------------------------------------------
   Register the convars that will control this effect
---------------------------------------------------------*/   
local pp_sharpen_contrast 	= CreateClientConVar( "pp_sharpen_contrast", "1", false, false )
local pp_sharpen_distance	= CreateClientConVar( "pp_sharpen_distance", "1", false, false )
local pp_sharpen			= CreateClientConVar( "pp_sharpen", "0", false, false )


function DrawSharpen( contrast, distance )

	render.UpdateScreenEffectTexture()

	_Material:SetMaterialFloat( "$contrast", contrast )
	_Material:SetMaterialFloat( "$distance", distance / ScrW() )
	
	
	render.SetMaterial( _Material )
	render.DrawScreenQuad()
	
end

local function DrawInternal()

	if ( !pp_sharpen:GetBool() ) then return end
	if ( !GAMEMODE:PostProcessPermitted( "sharpen" ) ) then return end

	DrawSharpen( pp_sharpen_contrast:GetFloat(), pp_sharpen_distance:GetFloat() );

end

hook.Add( "RenderScreenspaceEffects", "RenderSharpen", DrawInternal )


/*
// Control Panel
*/
local function BuildControlPanel( CPanel )

	CPanel:AddControl( "Header", { Text = "#Sharpen", Description = "" }  )
	CPanel:AddControl( "CheckBox", { Label = "#Enable", Command = "pp_sharpen" }  )
	
	CPanel:AddControl( "Slider", { Label = "#Distance", Command = "pp_sharpen_distance", Type = "Float", Min = "-5", Max = "5" }  )
	CPanel:AddControl( "Slider", { Label = "#Contrast", Command = "pp_sharpen_contrast", Type = "Float", Min = "0", Max = "20" }  )

end

/*
// Tool Menu
*/
local function AddPostProcessMenu()

	spawnmenu.AddToolMenuOption( "PostProcessing", "PPShader", "Sharpen", "#Sharpen", "", "", BuildControlPanel, { SwitchConVar = "pp_sharpen" } )

end

hook.Add( "PopulateToolMenu", "AddPostProcessMenu_Sharpen", AddPostProcessMenu )
