canvas-loop
Version:
canvas loop/scale utility
92 lines (58 loc) • 2.54 kB
Markdown
# canvas-loop
[](http://github.com/badges/stability-badges)
[](http://mattdesl.github.io/canvas-loop/)
[demo](http://mattdesl.github.io/canvas-loop/) - [source](demo.es6)
Yet another canvas shell utility, built on [canvas-fit](https://npmjs.org/package/canvas-fit) and [raf-loop](https://npmjs.org/package/raf-loop). Useful for full-screen retina canvas demos.
Example:
```js
var createGL = require('webgl-context')
var createLoop = require('canvas-loop')
// get a WebGL context
var gl = createGL()
var canvas = gl.canvas
document.body.appendChild(canvas)
// setup a retina-scaled canvas
var app = createLoop(canvas, {
scale: window.devicePixelRatio
})
// start rendering
app.start()
// on requestAnimationFrame
app.on('tick', function(dt) {
// do some rendering
gl.clear(gl.COLOR_BUFFER_BIT)
})
// handle window resize
app.on('resize', function() {
// the unscaled size
var width = app.shape[0]
var height = app.shape[1]
console.log('new canvas size', width, height)
})
```
See [demo.es6](demo.es6) for a full demo.
## Usage
[](https://www.npmjs.com/package/canvas-loop)
#### `app = createLoop(canvas[, opt])`
Creates a new loop with the given `canvas` (can be [2D](https://www.npmjs.com/package/2d-context) or [WebGL](https://www.npmjs.com/package/webgl-context)).
The options:
- `parent` element to fit to, or a scaling function (default `window`)
- `scale` scaling ratio for canvas (default 1)
These options are passed to [canvas-fit](https://github.com/hughsk/canvas-fit/).
#### `app.start()`
#### `app.stop()`
Start and stop the render loop. Returns the `app` for chaining.
#### `app.on('tick', fn)`
Listen to `tick` events, `fn` is called with `dt` parameter which is the delta time since last frame. Uses [raf-loop](https://www.npmjs.com/package/raf-loop).
#### `app.on('resize', fn)`
Called when the `window` has resized, after the canvas has been re-scaled according to its `parent`.
#### `app.shape`
A getter for the `[ width, height ]` of the canvas *without* device scaling. This is the same as:
```
[ canvas.width / app.scale, canvas.height / app.scale ]
```
#### `app.parent`
#### `app.scale`
Getters/setters to change `parent` or `scale` at runtime. See [canvas-fit](https://www.npmjs.com/package/canvas-fit) for details.
## License
MIT, see [LICENSE.md](http://github.com/mattdesl/canvas-loop/blob/master/LICENSE.md) for details.