Garry's Mod Wiki

CreateMaterial

  IMaterial CreateMaterial( string name, string shaderName, table materialData )

Description

Creates a new material with the specified name and shader.

Materials created with this function can be used in Entity:SetMaterial and Entity:SetSubMaterial by prepending a ! to their material name argument.

This will not create a new material if another material object with the same name already exists. All Materials created by this functions are cleaned up on map shutdown.

This does not work with patch materials.
.pngs must be loaded with Material before being used with this function.

Issue Tracker: 1531

Arguments

1 string name
The material name. Must be unique.
2 string shaderName
The shader name. See Shaders.
3 table materialData
Key-value table that contains shader parameters and proxies.

Unlike IMaterial:SetTexture, this table will not accept ITexture values. Instead, use the texture's name (see ITexture:GetName).

Returns

1 IMaterial
Created material

Example

Alternative to render.SetColorMaterial, mainly for use with Entity:SetMaterial

CreateMaterial( "colortexshp", "VertexLitGeneric", { ["$basetexture"] = "color/white", ["$model"] = 1, ["$translucent"] = 1, ["$vertexalpha"] = 1, ["$vertexcolor"] = 1 } )

Example

Sample example of using material proxies. Keep in mind that you can only have 1 instance of each proxy type! This is a limitation of how Lua tables work

local mat = CreateMaterial( "combine_ball_animated", "UnlitGeneric", { ["$basetexture"] = "effects/comball/comball", ["Proxies"] = { ["AnimatedOffsetTexture"] = { ["animatedtexturevar"] = "$basetexture", ["animatedtextureframenumvar"] = "$frame", ["animatedtextureframerate"] = 30 } } } ) hook.Add( "HUDPaint", "HUDPaint_DrawATexturedBox", function() surface.SetMaterial( mat ) surface.SetDrawColor( 255, 255, 255, 255 ) surface.DrawTexturedRect( 50, 50, 128, 128 ) end )