Draw

LittleJS Drawing System

  • Hybrid system with both Canvas2D and WebGL available
  • Super fast tile sheet rendering with WebGL
  • Can apply rotation, mirror, color and additive color
  • Font rendering system with built in engine font
  • Many useful utility functions

LittleJS uses a hybrid rendering solution with the best of both Canvas2D and WebGL. There are 3 canvas/contexts available to draw to... mainCanvas - 2D background canvas, non WebGL stuff like tile layers are drawn here. glCanvas - Used by the accelerated WebGL batch rendering system. overlayCanvas - Another 2D canvas that appears on top of the other 2 canvases.

The WebGL rendering system is very fast with some caveats...

  • Switching blend modes (additive) or textures causes another draw call which is expensive in excess
  • Group additive rendering together using renderOrder to mitigate this issue

The LittleJS rendering solution is intentionally simple, feel free to adjust it for your needs!

Members

(static) mainCanvas :HTMLCanvasElement

The primary 2D canvas visible to the user

Type:
  • HTMLCanvasElement

(static) mainCanvasSize :Vector2

The size of the main canvas (and other secondary canvases)

Type:

(static) mainContext :CanvasRenderingContext2D

2d context for mainCanvas

Type:
  • CanvasRenderingContext2D

(static) overlayCanvas :HTMLCanvasElement

A canvas that appears on top of everything the same size as mainCanvas

Type:
  • HTMLCanvasElement

(static) overlayContext :CanvasRenderingContext2D

2d context for overlayCanvas

Type:
  • CanvasRenderingContext2D

(static) textureInfos :Array

Array containing texture info for batch rendering system

Type:
  • Array

Methods

(static) drawCanvas2D(pos, size, angle, mirror, drawFunction, screenSpaceopt, contextopt)

Draw directly to a 2d canvas context in world space

Parameters:
NameTypeAttributesDefaultDescription
posVector2
sizeVector2
angleNumber
mirrorBoolean
drawFunctionfunction
screenSpaceBoolean<optional>
false
contextCanvasRenderingContext2D | OffscreenCanvasRenderingContext2D<optional>
mainContext

(static) drawCircle(pos, radiusopt, coloropt, lineWidthopt, lineColoropt, screenSpaceopt, contextopt)

Draw colored circle using passed in point

Parameters:
NameTypeAttributesDefaultDescription
posVector2
radiusNumber<optional>
1
colorColor<optional>
(1,1,1,1)
lineWidthNumber<optional>
0
lineColorColor<optional>
(0,0,0,1)
screenSpaceBoolean<optional>
false
contextCanvasRenderingContext2D<optional>
mainContext

(static) drawEllipse(pos, widthopt, heightopt, angleopt, coloropt, lineWidthopt, lineColoropt, screenSpaceopt, contextopt)

Draw colored ellipse using passed in point

Parameters:
NameTypeAttributesDefaultDescription
posVector2
widthNumber<optional>
1
heightNumber<optional>
1
angleNumber<optional>
0
colorColor<optional>
(1,1,1,1)
lineWidthNumber<optional>
0
lineColorColor<optional>
(0,0,0,1)
screenSpaceBoolean<optional>
false
contextCanvasRenderingContext2D<optional>
mainContext

(static) drawLine(posA, posB, thicknessopt, coloropt, useWebGLopt, screenSpaceopt, contextopt)

Draw colored line between two points

Parameters:
NameTypeAttributesDefaultDescription
posAVector2
posBVector2
thicknessNumber<optional>
0.1
colorColor<optional>
(1,1,1,1)
useWebGLBoolean<optional>
glEnable
screenSpaceBoolean<optional>
false
contextCanvasRenderingContext2D | OffscreenCanvasRenderingContext2D<optional>

(static) drawPoly(points, coloropt, lineWidthopt, lineColoropt, screenSpaceopt, contextopt)

Draw colored polygon using passed in points

Parameters:
NameTypeAttributesDefaultDescription
pointsArray

Array of Vector2 points

colorColor<optional>
(1,1,1,1)
lineWidthNumber<optional>
0
lineColorColor<optional>
(0,0,0,1)
screenSpaceBoolean<optional>
false
contextCanvasRenderingContext2D<optional>
mainContext

(static) drawRect(pos, sizeopt, coloropt, angleopt, useWebGLopt, screenSpaceopt, contextopt)

Draw colored rect centered on pos

Parameters:
NameTypeAttributesDefaultDescription
posVector2
sizeVector2<optional>
(1,1)
colorColor<optional>
(1,1,1,1)
angleNumber<optional>
useWebGLBoolean<optional>
glEnable
screenSpaceBoolean<optional>
false
contextCanvasRenderingContext2D | OffscreenCanvasRenderingContext2D<optional>

(static) drawText(text, pos, sizeopt, coloropt, lineWidthopt, lineColoropt, textAlignopt, fontopt, maxWidthopt, contextopt)

Draw text on main canvas in world space Automatically splits new lines into rows

Parameters:
NameTypeAttributesDefaultDescription
textString
posVector2
sizeNumber<optional>
1
colorColor<optional>
(1,1,1,1)
lineWidthNumber<optional>
0
lineColorColor<optional>
(0,0,0,1)
textAlignCanvasTextAlign<optional>
'center'
fontString<optional>
fontDefault
maxWidthNumber<optional>
contextCanvasRenderingContext2D | OffscreenCanvasRenderingContext2D<optional>
mainContext

(static) drawTextOverlay(text, pos, sizeopt, coloropt, lineWidthopt, lineColoropt, textAlignopt, fontopt, maxWidthopt)

Draw text on overlay canvas in world space Automatically splits new lines into rows

Parameters:
NameTypeAttributesDefaultDescription
textString
posVector2
sizeNumber<optional>
1
colorColor<optional>
(1,1,1,1)
lineWidthNumber<optional>
0
lineColorColor<optional>
(0,0,0,1)
textAlignCanvasTextAlign<optional>
'center'
fontString<optional>
fontDefault
maxWidthNumber<optional>

(static) drawTextScreen(text, pos, sizeopt, coloropt, lineWidthopt, lineColoropt, textAlignopt, fontopt, maxWidthopt, contextopt)

Draw text on overlay canvas in screen space Automatically splits new lines into rows

Parameters:
NameTypeAttributesDefaultDescription
textString
posVector2
sizeNumber<optional>
1
colorColor<optional>
(1,1,1,1)
lineWidthNumber<optional>
0
lineColorColor<optional>
(0,0,0,1)
textAlignCanvasTextAlign<optional>
center
fontString<optional>
fontDefault
maxWidthNumber<optional>
contextCanvasRenderingContext2D | OffscreenCanvasRenderingContext2D<optional>
overlayContext

(static) drawTile(pos, sizeopt, tileInfoopt, coloropt, angleopt, mirroropt, additiveColoropt, useWebGLopt, screenSpaceopt, contextopt)

Draw textured tile centered in world space, with color applied if using WebGL

Parameters:
NameTypeAttributesDefaultDescription
posVector2

Center of the tile in world space

sizeVector2<optional>
(1,1)

Size of the tile in world space

tileInfoTileInfo<optional>

Tile info to use, untextured if undefined

colorColor<optional>
(1,1,1,1)

Color to modulate with

angleNumber<optional>
0

Angle to rotate by

mirrorBoolean<optional>

If true image is flipped along the Y axis

additiveColorColor<optional>
(0,0,0,0)

Additive color to be applied

useWebGLBoolean<optional>
glEnable

Use accelerated WebGL rendering

screenSpaceBoolean<optional>
false

If true the pos and size are in screen space

contextCanvasRenderingContext2D | OffscreenCanvasRenderingContext2D<optional>

Canvas 2D context to draw to

(static) getCameraSize() → {Vector2}

Get the camera's visible area in world space

Returns:
Type: 
Vector2

(static) isFullscreen() → {Boolean}

Returns true if fullscreen mode is active

Returns:
Type: 
Boolean

(static) screenToWorld(screenPos) → {Vector2}

Convert from screen to world space coordinates

Parameters:
NameTypeDescription
screenPosVector2
Returns:
Type: 
Vector2

(static) setBlendMode(additiveopt, useWebGLopt, contextopt)

Enable normal or additive blend mode

Parameters:
NameTypeAttributesDefaultDescription
additiveBoolean<optional>
useWebGLBoolean<optional>
glEnable
contextCanvasRenderingContext2D | OffscreenCanvasRenderingContext2D<optional>
mainContext

(static) tile(posopt, sizeopt, textureIndexopt, paddingopt) → {TileInfo}

Create a tile info object using a grid based system

  • This can take vecs or floats for easier use and conversion
  • If an index is passed in, the tile size and index will determine the position
Parameters:
NameTypeAttributesDefaultDescription
posNumber | Vector2<optional>
0

Index of tile in sheet

sizeNumber | Vector2<optional>
tileSizeDefault

Size of tile in pixels

textureIndexNumber<optional>
0

Texture index to use

paddingNumber<optional>
0

How many pixels padding around tiles

Returns:
Type: 
TileInfo
Example
tile(2)                       // a tile at index 2 using the default tile size of 16
tile(5, 8)                    // a tile at index 5 using a tile size of 8
tile(1, 16, 3)                // a tile at index 1 of size 16 on texture 3
tile(vec2(4,8), vec2(30,10))  // a tile at index (4,8) with a size of (30,10)

(static) toggleFullscreen()

Toggle fullsceen mode

(static) worldToScreen(worldPos) → {Vector2}

Convert from world to screen space coordinates

Parameters:
NameTypeDescription
worldPosVector2
Returns:
Type: 
Vector2