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 properly
This function sets new text position at the end of the previous drawn text length - this can be used to change text properties (such as font or color) without recalculating and resetting 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.


Draws 'Hello World' on the screen. All functions in this example must be called for the draw to work flawlessly.

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 )