Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var browser_graphics = (function() {
- var _requestAnimationFrame = window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.msRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- function(cb) {
- window.setTimeout(cb, 1000 / 60);
- };
- var renderers = [];
- var active = false;
- var _run = function() {
- active = true;
- var _render = function() {
- if (!active)
- return;
- _requestAnimationFrame(_render);
- var t = +Date.now();
- for (var i = 0; i < renderers.length; i++) {
- var r = renderers[i];
- var interval = r.interval;
- var delta = t - r.last_frame_ms;
- if (delta > interval) {
- r.last_frame_ms = t - (delta % interval);
- r.cb(t);
- }
- }
- }
- _render();
- }
- var _stop = function() {
- active = false;
- }
- var addRenderer = function(cb, max_fps) {
- max_fps = max_fps || 60;
- removeRenderer(cb);
- renderers.push({
- cb: cb,
- interval: 1000 / max_fps,
- last_frame_ms: 0
- });
- if (!active) {
- _run();
- }
- }
- var removeRenderer = function(cb) {
- for (var i = 0; i < renderers.length; i++) {
- if (renderers[i].cb === cb) {
- renderers.splice(i, 1);
- break;
- }
- }
- if (renderers.length === 0 && active) {
- _stop();
- }
- }
- return {
- addRenderer: addRenderer,
- removeRenderer: removeRenderer,
- }
- })();
- Usage:
- function myRender() {
- // render here
- }
- browser_graphics.addRenderer(myRender, 25); // you can add multiple different renderers here
- And when you no longer need it:
- browser_graphics.removeRenderer(myRender);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement