This commit is contained in:
lifestorm
2024-08-04 22:55:00 +03:00
parent 8064ba84d8
commit 73479cff9e
7338 changed files with 1718883 additions and 14 deletions

View File

@@ -0,0 +1,105 @@
--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
AddCSLuaFile()
if SERVER then return end
local render = render
local Vector = Vector
local STENCIL_ALWAYS = STENCIL_ALWAYS
local STENCIL_KEEP = STENCIL_KEEP
local STENCIL_REPLACE = STENCIL_REPLACE
local STENCIL_EQUAL = STENCIL_EQUAL
local MATERIAL_CULLMODE_CW = MATERIAL_CULLMODE_CW
local MATERIAL_CULLMODE_CCW = MATERIAL_CULLMODE_CCW
local transparent = Color(0, 0, 0, 0)
local clipping = false
local clip = {}
setmetatable(clip, {
__call = function()
if clipping then
clipping = false
render.SetStencilEnable(false)
end
end
})
setfenv(1, clip)
local stencil do
local stenciling = false
function stencil()
if stenciling then
render.SetStencilCompareFunction(STENCIL_EQUAL)
stenciling = false
return
end
render.SetStencilWriteMask(0xFF)
render.SetStencilTestMask(0xFF)
render.SetStencilReferenceValue(0)
render.SetStencilCompareFunction(STENCIL_ALWAYS)
render.SetStencilPassOperation(STENCIL_KEEP)
render.SetStencilFailOperation(STENCIL_KEEP)
render.SetStencilZFailOperation(STENCIL_KEEP)
render.ClearStencil()
render.SetStencilEnable(true)
render.SetStencilReferenceValue(1)
render.SetStencilCompareFunction(STENCIL_ALWAYS)
render.SetStencilPassOperation(STENCIL_REPLACE)
stenciling = true
end end
do
local vert1, vert2, vert3, vert4 = Vector(), Vector(), Vector(), Vector()
function clip:Scissor2D(w, h)
clip()
vert2[2] = h
vert3[1] = w
vert3[2] = h
vert4[1] = w
stencil()
render.CullMode(MATERIAL_CULLMODE_CW)
render.SetColorMaterial()
render.DrawQuad(vert1, vert2, vert3, vert4, transparent)
render.CullMode(MATERIAL_CULLMODE_CCW)
stencil()
clipping = true
end
end
do
function clip:Scissor3D(pos, ang, mins, maxs)
clip()
stencil()
render.SetColorMaterial()
render.DrawBox(pos, ang, mins, maxs, transparent, true)
stencil()
clipping = true
end
end
return clip