Garry's Mod Wiki

render.PushRenderTarget

  render.PushRenderTarget( ITexture texture = nil, number x = 0, number y = 0, number w = texture:Width(), number h = texture:Height() )

Description

Pushes the current render target and viewport to the RT stack then sets a new current render target and viewport. If the viewport is not specified, the dimensions of the render target are used instead.

This is similar to a call to render.SetRenderTarget and render.SetViewPort where the current render target and viewport have been saved beforehand, except the viewport isn't clipped to screen bounds.

See also render.PopRenderTarget.

If you want to render to the render target in 2d mode and it is not the same size as the screen, use cam.Start2D and cam.End2D.
If the render target is bigger than the screen, rendering done with the surface library will be clipped to the screen bounds unless you call DisableClipping

Arguments

1 ITexture texture = nil
The new render target to be used.
Can be set to nil to push the main game frame buffer.
2 number x = 0
X origin of the viewport.
3 number y = 0
Y origin of the viewport.
4 number w = texture:Width()
Width of the viewport.
5 number h = texture:Height()
Height of the viewport

Example

Shows how to create a material which uses a custom created Render Target texture.

-- Create render target local exampleRT = GetRenderTarget( "example_rt", 1024, 1024 ) -- Draw to the render target render.PushRenderTarget( exampleRT ) cam.Start2D() -- Draw background surface.SetDrawColor( 0, 0, 0, 255 ) surface.DrawRect( 0, 0, 1024, 1024 ) -- Draw some foreground stuff surface.SetDrawColor( 255, 0, 0, 255 ) surface.DrawRect( 0, 0, 256, 256 ) cam.End2D() render.PopRenderTarget() local customMaterial = CreateMaterial( "example_rt_mat", "UnlitGeneric", { ["$basetexture"] = exampleRT:GetName(), -- You can use "example_rt" as well ["$translucent"] = 1, ["$vertexcolor"] = 1 } ) hook.Add( "HUDPaint", "ExampleDraw", function() surface.SetDrawColor( 255, 255, 255, 255 ) surface.SetMaterial( customMaterial ) surface.DrawTexturedRect( 0, 0, customMaterial:GetTexture( "$basetexture" ):Width(), customMaterial:GetTexture( "$basetexture" ):Height() ) end )
Output: A black 1024x1024 render target with a 256x256 red square in top left corner drawn in your top left corner.

Example

Shows how you can use alpha channel with render targets.