Garry's Mod Wiki

GetRenderTarget

  ITexture GetRenderTarget( string name, number width, number height )

Description

Creates or gets the rendertarget with the given name.

See GetRenderTargetEx for an advanced version of this function with more options.

This crashes when used on a cubemap texture.

Issue Tracker: 2885
Rendertargets are not garbage-collected, which means they will remain in memory until you disconnect. So make sure to avoid creating new ones unecessarily and re-use as many of your existing rendertargets as possible to avoid filling up all your memory.
Calling this function is equivalent to

GetRenderTargetEx(name, width, height, RT_SIZE_NO_CHANGE, MATERIAL_RT_DEPTH_SEPARATE, bit.bor(2, 256), 0, IMAGE_FORMAT_BGRA8888 )

Arguments

1 string name
The internal name of the render target.
2 number width
The width of the render target, must be power of 2. If not set to PO2, the size will be automatically converted to the nearest PO2 size.
3 number height
The height of the render target, must be power of 2. If not set to PO2, the size will be automatically converted to the nearest PO2 size.

Returns

1 ITexture
The render target

Example

Example usage of a render target

-- Give the RT a size local TEX_SIZE = 512 -- Create the RT local tex = GetRenderTarget( "ExampleRT", TEX_SIZE, TEX_SIZE ) -- Write something to the RT -- Note how this is not in a render hook, in this case we only write to the render target once local txBackground = surface.GetTextureID( "models/weapons/v_toolgun/screen_bg" ) render.PushRenderTarget( tex ) cam.Start2D() surface.SetDrawColor( color_white ) surface.SetTexture( txBackground ) surface.DrawTexturedRect( 0, 0, TEX_SIZE, TEX_SIZE ) cam.End2D() render.PopRenderTarget() -- Create a render-able material for our render target local myMat = CreateMaterial( "ExampleRTMat", "UnlitGeneric", { ["$basetexture"] = tex:GetName() -- Make the material use our render target texture } ) -- Draw it on screen hook.Add( "HUDPaint", "DrawExampleMat", function() surface.SetDrawColor( color_white ) surface.SetMaterial( myMat ) surface.DrawTexturedRect( 25, 25, TEX_SIZE, TEX_SIZE ) end )

Example

Example usage of a render target with transparency/alpha channel

local textureRT = GetRenderTarget( "ExampleRTwithAlpha", 512, 512 ) local mat = CreateMaterial( "ExampleRTwithAlpha_Mat", "UnlitGeneric", { ['$basetexture'] = textureRT:GetName(), ["$translucent"] = "1" -- This is necessary to render the RT with alpha channel } ); hook.Add( "HUDPaint", "ExampleRTwithAlpha_Render", function() render.PushRenderTarget( textureRT ) cam.Start2D() -- Clear the RT render.Clear( 0, 0, 0, 0 ) -- Draw some basic animated stuff on it draw.RoundedBox( 0, 20, 100 + math.sin( CurTime() ) * 50, 50, 50, color_white ) -- Draw with transparency draw.RoundedBox( 0, 120, 100 + math.sin( CurTime() ) * 50, 50, 50, Color( 255, 0, 0, 100 ) ) cam.End2D() render.PopRenderTarget() -- Draw our render target on screen so we can see our result surface.SetDrawColor( color_white ) surface.SetMaterial( mat ) surface.DrawTexturedRect( 50, 50, 512, 512 ) end )