# love.graphics.newMesh

Available since LÖVE 0.9.0
This function is not supported in earlier versions.

Creates a new Mesh.

| This function can be slow if it is called repeatedly, such as from love.update or love.draw. If you need to use a specific resource often, create it once and store it somewhere it can be reused! |

## Function

### Synopsis

    mesh = love.graphics.newMesh( vertices, texture, mode )

### Arguments

`table vertices`
  The table filled with vertex information tables for each vertex as follows:
  `number [1]`
    The position of the vertex on the x-axis.
  `number [2]`
    The position of the vertex on the y-axis.
  `number [3]`
    The u texture coordinate. Texture coordinates are normally in the range of [0, 1], but can be greater or less (see WrapMode.)
  `number [4]`
    The v texture coordinate. Texture coordinates are normally in the range of [0, 1], but can be greater or less (see WrapMode.)
  `number [5] (255)`
    The red color component.
  `number [6] (255)`
    The green color component.
  `number [7] (255)`
    The blue color component.
  `number [8] (255)`
    The alpha color component.

`Texture texture (nil)`
  The Image or Canvas to use when drawing the Mesh. May be nil to use no texture.
`MeshDrawMode mode ("fan")`
  How the vertices are used when drawing. The default mode "fan" is sufficient for simple convex polygons.

### Returns

`Mesh mesh`
  The new mesh.

## Function

Available since LÖVE 0.9.1
This variant is not supported in earlier versions.

### Synopsis

    mesh = love.graphics.newMesh( vertexcount, texture, mode )

### Arguments

`number vertexcount`
  The total number of vertices the Mesh will use. Each vertex is initialized to `{0,0, 0,0, 255,255,255,255}`.
`Texture texture (nil)`
  The Image or Canvas to use when drawing the Mesh. May be nil to use no texture.
`MeshDrawMode mode ("fan")`
  How the vertices are used when drawing. The default mode "fan" is sufficient for simple convex polygons.

### Returns

`Mesh mesh`
  The new mesh.

### Notes

Mesh:setVertices or Mesh:setVertex and Mesh:setDrawRange can be used to specify vertex information once the Mesh is created.

## Examples

### Creates and draws a Mesh identical to a normal drawn image but with different colors at each corner

    function love.load()
    	image = love.graphics.newImage("pig.png")

    	local vertices = {
    		{
    			-- top-left corner (red-tinted)
    			0, 0, -- position of the vertex
    			0, 0, -- texture coordinate at the vertex position
    			255, 0, 0, -- color of the vertex
    		},
    		{
    			-- top-right corner (green-tinted)
    			image:getWidth(), 0,
    			1, 0, -- texture coordinates are in the range of [0, 1]
    			0, 255, 0
    		},
    		{
    			-- bottom-right corner (blue-tinted)
    			image:getWidth(), image:getHeight(),
    			1, 1,
    			0, 0, 255
    		},
    		{
    			-- bottom-left corner (yellow-tinted)
    			0, image:getHeight(),
    			0, 1,
    			255, 255, 0
    		},
    	}

    	-- the Mesh DrawMode "fan" works well for 4-vertex Meshes.
    	mesh = love.graphics.newMesh(vertices, image, "fan")
    end

    function love.draw()
    	love.graphics.draw(mesh, 0, 0)
    end

### Creates and draws a textured circle with a red tint at the center.

    function CreateTexturedCircle(image, segments)
    	segments = segments or 40
    	local vertices = {}

    	-- The first vertex is at the center, and has a red tint. We're centering the circle around the origin (0, 0).
    	table.insert(vertices, {0, 0, 0.5, 0.5, 255, 0, 0})

    	-- Create the vertices at the edge of the circle.
    	for i=0, segments do
    		local angle = (i / segments) * math.pi * 2

    		-- Unit-circle.
    		local x = math.cos(angle)
    		local y = math.sin(angle)

    		-- Our position is in the range of [-1, 1] but we want the texture coordinate to be in the range of [0, 1].
    		local u = (x + 1) * 0.5
    		local v = (y + 1) * 0.5

    		-- The per-vertex color defaults to white.
    		table.insert(vertices, {x, y, u, v})
    	end

    	-- The "fan" draw mode is perfect for our circle.
    	return love.graphics.newMesh(vertices, image, "fan")
    end

    function love.load()
    	image = love.graphics.newImage("pig.png")
    	mesh = CreateTexturedCircle(image)
    end

    function love.draw()
    	local radius = 100
    	local mx, my = love.mouse.getPosition()

    	-- We created a unit-circle, so we can use the scale parameter for the radius directly.
    	love.graphics.draw(mesh, mx, my, 0, radius, radius)
    end

### Creates a circle and draws it more efficiently than love.graphics.circle.

    function CreateCircle(segments)
    	segments = segments or 40
    	local vertices = {}

    	-- The first vertex is at the origin (0, 0) and will be the center of the circle.
    	table.insert(vertices, {0, 0})

    	-- Create the vertices at the edge of the circle.
    	for i=0, segments do
    		local angle = (i / segments) * math.pi * 2

    		-- Unit-circle.
    		local x = math.cos(angle)
    		local y = math.sin(angle)

    		table.insert(vertices, {x, y})
    	end

    	-- The "fan" draw mode is perfect for our circle. We aren't texturing it, so we leave that argument as nil.
    	return love.graphics.newMesh(vertices, nil, "fan")
    end

    function love.load()
    	mesh = CreateCircle()
    end

    function love.draw()
    	local radius = 100
    	local mx, my = love.mouse.getPosition()

    	-- We created a unit-circle, so we can use the scale parameter for the radius directly.
    	love.graphics.draw(mesh, mx, my, 0, radius, radius)
    end

## See Also

- love.graphics
- Mesh

##

Category:

- Functions