diff --git a/lua/smh/client/highlighter.lua b/lua/smh/client/highlighter.lua index 5769d13..622a974 100644 --- a/lua/smh/client/highlighter.lua +++ b/lua/smh/client/highlighter.lua @@ -1,8 +1,9 @@ -- Most taken from lua/includes/modules/halo.lua -local matColor = Material( "model_color" ) +-- https://github.com/Facepunch/garrysmod/blob/e47ac049d026f922867ee3adb2c4746fb1244300/garrysmod/lua/includes/modules/halo.lua#L38 +-- local matColor = Material( "model_color" ) local mat_Copy = Material( "pp/copy" ) local mat_Add = Material( "pp/add" ) -local mat_Sub = Material( "pp/sub" ) +-- local mat_Sub = Material( "pp/sub" ) local rt_Stencil = render.GetBloomTex0() local rt_Store = render.GetScreenEffectTexture( 0 ) local function RenderHalo(entities) @@ -20,105 +21,68 @@ local function RenderHalo(entities) -- Write to the stencil.. cam.Start3D( EyePos(), EyeAngles() ) - -- cam.IgnoreZ( entry.IgnoreZ ) - cam.IgnoreZ( false ) - render.OverrideDepthEnable( true, false ) -- Don't write depth - render.SetStencilEnable( true ) - render.SetStencilFailOperation( STENCILOPERATION_KEEP ) - render.SetStencilZFailOperation( STENCILOPERATION_KEEP ) - render.SetStencilPassOperation( STENCILOPERATION_REPLACE ) - render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_ALWAYS ) - render.SetStencilWriteMask( 1 ) - render.SetStencilReferenceValue( 1 ) + render.SuppressEngineLighting(true) + cam.IgnoreZ( false ) - render.SetBlend( 0 ) -- don't render any colour + render.SetStencilWriteMask( 1 ) + render.SetStencilTestMask( 1 ) + render.SetStencilReferenceValue( 1 ) + + render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_ALWAYS ) + render.SetStencilPassOperation( STENCILOPERATION_REPLACE ) + render.SetStencilFailOperation( STENCILOPERATION_KEEP ) + render.SetStencilZFailOperation( STENCILOPERATION_KEEP ) - render.PushFlashlightMode( true ) - for entity, _ in pairs(entities) do - if IsValid(entity) then - entity:DrawModel() - end - end - render.PopFlashlightMode() + for entity, _ in pairs(entities) do + if IsValid(entity) then + entity:DrawModel() + end + end - cam.End3D() + render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_EQUAL ) + render.SetStencilPassOperation( STENCILOPERATION_KEEP ) - -- FILL COLOUR - -- Write to the colour buffer - cam.Start3D( EyePos(), EyeAngles() ) + cam.Start2D() + surface.SetDrawColor(0, 255, 0) + surface.DrawRect(0, 0, ScrW(), ScrH()) + cam.End2D() - render.MaterialOverride( matColor ) - cam.IgnoreZ( false ); - - render.SetStencilEnable( true ) - render.SetStencilWriteMask( 0 ) - render.SetStencilReferenceValue( 0 ) - render.SetStencilTestMask( 1 ) - render.SetStencilFailOperation( STENCILOPERATION_KEEP ) - render.SetStencilPassOperation( STENCILOPERATION_KEEP ) - render.SetStencilZFailOperation( STENCILOPERATION_KEEP ) - render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_NOTEQUAL ) - - render.SetColorModulation(0, 1, 0) - render.SetBlend(1) - - for entity, _ in pairs(entities) do - if IsValid(entity) then - entity:DrawModel() - end - end - - render.MaterialOverride(nil) + render.SuppressEngineLighting(false) render.SetStencilEnable(false) - cam.End3D() -- BLUR IT render.CopyRenderTargetToTexture( rt_Stencil ) - render.OverrideDepthEnable( false, false ) - render.SetStencilEnable( false ); render.BlurRenderTarget( rt_Stencil, 2, 2, 1 ) -- Put our scene back render.SetRenderTarget( OldRT ) - render.SetColorModulation( 1, 1, 1 ) - render.SetStencilEnable( false ) - render.OverrideDepthEnable( true, false ) - render.SetBlend( 1 ) mat_Copy:SetTexture( "$basetexture", rt_Store ) + mat_Copy:SetString( "$color", "1 1 1" ) + mat_Copy:SetString( "$alpha", "1" ) render.SetMaterial( mat_Copy ) render.DrawScreenQuad() - -- DRAW IT TO THE SCEEN - render.SetStencilEnable( true ) - render.SetStencilWriteMask( 0 ) - render.SetStencilReferenceValue( 0 ) - render.SetStencilTestMask( 1 ) - render.SetStencilFailOperation( STENCILOPERATION_KEEP ) - render.SetStencilPassOperation( STENCILOPERATION_KEEP ) - render.SetStencilZFailOperation( STENCILOPERATION_KEEP ) - render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_EQUAL ) - mat_Add:SetTexture( "$basetexture", rt_Stencil ) - render.SetMaterial( mat_Add ) + render.SetStencilCompareFunction( STENCILCOMPARISONFUNCTION_NOTEQUAL ) - for i=0, 2 do - render.DrawScreenQuad() - end + mat_Add:SetTexture( "$basetexture", rt_Stencil ) + render.SetMaterial( mat_Add ) + + for i=0, 2 do + render.DrawScreenQuad() + end + + render.SetStencilEnable( false ) -- PUT EVERYTHING BACK HOW WE FOUND IT render.SetStencilWriteMask( 0 ) render.SetStencilReferenceValue( 0 ) render.SetStencilTestMask( 0 ) - render.SetStencilEnable( false ) - render.OverrideDepthEnable( false ) - render.SetBlend( 1 ) - - cam.IgnoreZ( false ) end