mirror of
https://github.com/Winded/StopMotionHelper.git
synced 2025-03-04 03:13:33 -05:00
Update highlighter.lua to use the newer halo.Render implementation
- Fixes flickering with advanced colour entities or other scenarios
This commit is contained in:
parent
c48b53e03b
commit
3ac3f0b335
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user