Garry's Mod Wiki


  surface.DrawText( string text, boolean forceAdditive = nil )


Draw the specified text on the screen, using the previously set position, font and color. This function does not handle newlines.

This function moves the text position by the length of the drawn text - this can be used to change text properties (such as font or color) without having to manually recalculate the text position. See example #2 for example use of this behavior.

This is a rendering function that requires a 2d rendering context.

This means that it will only work in 2d Rendering Hooks.


1 string text
The text to be rendered.
2 boolean forceAdditive = nil
true to force text to render additive, false to force not additive, nil to use font's value.

When additive rendering is enabled, the rendered text pixels will be added to the existing screen pixels, rather than replacing them outright. This means black text will be invisible, and drawing on a pure white background will be impossible.



Draws Hello World on the screen. All functions in this example must be called for the rendering to work flawlessly every time.

hook.Add( "HUDPaint", "drawsometext", function() surface.SetFont( "Default" ) surface.SetTextColor( 255, 255, 255 ) surface.SetTextPos( 128, 128 ) surface.DrawText( "Hello World" ) end )


Draws rainbow text without using surface.GetTextSize and surface.SetTextPos for every character (more efficient).

local text = "~Rainbow~" hook.Add( "HUDPaint", "drawsometext", function() surface.SetFont( "DermaLarge" ) surface.SetTextPos( 400, 128 ) for char = 1, #text do local col = HSVToColor( ( ( RealTime() * 100 ) - char * 15 ) % 360, 1, 1 ) surface.SetTextColor( col.r, col.g, col.b ) -- Providing 3 numbers to surface.SetTextColor rather surface.DrawText( string.sub( text, char, char ) ) -- than a single color is faster end end )