Revision Difference
render.PushRenderTarget#513091
<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>surface.DisableClipping</page></note>⤶
</description>⤶
<realm>Client</realm>⤶
<args>⤶
<arg name="texture" type="ITexture">The new render target to be used.</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>