Garry's Mod Wiki

render.OverrideBlend

  render.OverrideBlend( boolean enabled, number srcBlend, number destBlend, number blendFunc, number srcBlendAlpha = none, number destBlendAlpha = none, number blendFuncAlpha = none )

Description

Overrides the internal graphical functions used to determine the final color and alpha of a rendered texture.

See also render.OverrideAlphaWriteEnable.

Doing surface draw calls with alpha set to 0 is a no-op and won't have an effect.

Arguments

1 boolean enabled
true to enable, false to disable. No other arguments are required when disabling.
2 number srcBlend
The source color blend function BLEND enum. Determines how a rendered texture's final color should be calculated.
3 number destBlend
The destination color blend function BLEND enum.
4 number blendFunc
The blend mode used for drawing the color layer BLENDFUNC enum.
5 number srcBlendAlpha = none
The source alpha blend function BLEND enum. Determines how a rendered texture's final alpha should be calculated.
6 number destBlendAlpha = none
The destination alpha blend function BLEND enum.
7 number blendFuncAlpha = none
The blend mode used for drawing the alpha layer BLENDFUNC enum.

Example

In this example we draw a lightning bolt over our player's head.

We shouldn't really draw the lightning in the PreDrawTranslucentRenderables hook as this causes issues rendering transparent objects behind the lightning, but it's a quick example of how the function works. Normally it should be drawn in a custom lua effect's EFFECT:Render.

-- Our sprite texture to render. Rendering this texture without -- render.OverrideBlendFunc will result in black borders around the lightning beam. local lightningMaterial = Material("sprites/lgtning") hook.Add( "PreDrawTranslucentRenderables", "LightningExample", function(isDrawingDepth, isDrawingSkybox) if isDrawingDepth or isDrawSkybox then return end local ply = Entity(1) if !IsValid(ply) then return end -- Calculate a random UV to use for the lightning to give it some movement local uv = math.Rand(0, 1) -- Enable blend override to interpret the color and alpha from the texture. render.OverrideBlend( true, BLEND_SRC_COLOR, BLEND_SRC_ALPHA, BLENDFUNC_ADD, BLEND_ONE, BLEND_ZERO, BLENDFUNC_ADD ) render.SetMaterial(lightningMaterial) -- Render a lightning beam along points randomly offset from a line above the player. render.StartBeam(5) render.AddBeam(ply:GetPos() + Vector(0,0,035), 20, uv, Color(255,255,255,255)) render.AddBeam(ply:GetPos() + Vector(0,0,135) + Vector(math.Rand(-20,20),math.Rand(-20,20),0), 20, uv*2, Color(255,255,255,255)) render.AddBeam(ply:GetPos() + Vector(0,0,235) + Vector(math.Rand(-20,20),math.Rand(-20,20),0), 20, uv*3, Color(255,255,255,255)) render.AddBeam(ply:GetPos() + Vector(0,0,335) + Vector(math.Rand(-20,20),math.Rand(-20,20),0), 20, uv*4, Color(255,255,255,255)) render.AddBeam(ply:GetPos() + Vector(0,0,435) + Vector(math.Rand(-20,20),math.Rand(-20,20),0), 20, uv*5, Color(255,255,255,255)) render.EndBeam() -- Disable blend override render.OverrideBlend( false ) end )
Output: