Garry's Mod Wiki

Revision Difference

render.PushRenderTarget#561616

<function name="PushRenderTarget" parent="render" type="libraryfunc"> <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 <page>render.SetRenderTarget</page> and <page>render.SetViewPort</page> where the current render target and viewport have been saved beforehand, except the viewport isn't clipped to screen bounds. See also <page>render.PopRenderTarget</page>. <note>If you want to render to the render target in 2d mode and it is not the same size as the screen, use <page>cam.Start2D</page> and <page>cam.End2D</page>.</note> <note>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 <page>Global.DisableClipping</page></note> </description> <realm>Client</realm> <args> <arg name="texture" type="ITexture">⤶ <arg name="texture" type="ITexture" default="nil">⤶ The new render target to be used. Note: This should be `nil` to render to the main game view. Can be set to `nil` to push the main game frame buffer. </arg> <arg name="x" type="number" default="0">X origin of the viewport.</arg> <arg name="y" type="number" default="0">Y origin of the viewport.</arg> <arg name="w" type="number" default="texture:Width()">Width of the viewport.</arg> <arg name="h" type="number" default="texture:Height()">Height of the viewport</arg> </args> </function> <example> <description>Shows how to create a material which uses a custom created Render Target texture.</description> <code> -- 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 ) </code> <output>A black 1024x1024 render target with a 256x256 red square in top left corner drawn in your top left corner.</output> </example> <example> <description>Shows how you can use alpha channel with render targets.</description> <code> render.PushRenderTarget( texture ) render.OverrideAlphaWriteEnable( true, true ) render.ClearDepth() render.Clear( 0, 0, 0, 0 ) -- Draw stuff here render.OverrideAlphaWriteEnable( false ) render.PopRenderTarget() </code> </example>