Advertisement
Guest User

Untitled

a guest
Feb 10th, 2015
667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var browser_graphics = (function() {
  2.     var _requestAnimationFrame = window.requestAnimationFrame ||
  3.         window.webkitRequestAnimationFrame ||
  4.         window.msRequestAnimationFrame ||
  5.         window.mozRequestAnimationFrame ||
  6.         window.oRequestAnimationFrame ||
  7.         function(cb) {
  8.             window.setTimeout(cb, 1000 / 60);
  9.         };
  10.  
  11.     var renderers = [];
  12.     var active = false;
  13.  
  14.     var _run = function() {
  15.         active = true;
  16.  
  17.         var _render = function() {
  18.             if (!active)
  19.                 return;
  20.  
  21.             _requestAnimationFrame(_render);
  22.  
  23.             var t = +Date.now();
  24.  
  25.             for (var i = 0; i < renderers.length; i++) {
  26.                 var r = renderers[i];
  27.                 var interval = r.interval;
  28.                 var delta = t - r.last_frame_ms;
  29.  
  30.                 if (delta > interval) {
  31.                     r.last_frame_ms = t - (delta % interval);
  32.                     r.cb(t);
  33.                 }
  34.             }
  35.         }
  36.  
  37.         _render();
  38.     }
  39.  
  40.     var _stop = function() {
  41.         active = false;
  42.     }
  43.  
  44.     var addRenderer = function(cb, max_fps) {
  45.  
  46.         max_fps = max_fps || 60;
  47.  
  48.         removeRenderer(cb);
  49.  
  50.         renderers.push({
  51.             cb: cb,
  52.             interval: 1000 / max_fps,
  53.             last_frame_ms: 0
  54.         });
  55.  
  56.  
  57.         if (!active) {
  58.             _run();
  59.         }
  60.     }
  61.  
  62.     var removeRenderer = function(cb) {
  63.         for (var i = 0; i < renderers.length; i++) {
  64.             if (renderers[i].cb === cb) {
  65.                 renderers.splice(i, 1);
  66.                 break;
  67.             }
  68.         }
  69.  
  70.         if (renderers.length === 0 && active) {
  71.             _stop();
  72.         }
  73.     }
  74.  
  75.     return {
  76.         addRenderer: addRenderer,
  77.         removeRenderer: removeRenderer,
  78.     }
  79. })();
  80.  
  81.  
  82.  
  83.  
  84.  
  85. Usage:
  86. function myRender() {
  87.     // render here
  88. }
  89. browser_graphics.addRenderer(myRender, 25); // you can add multiple different renderers here
  90. And when you no longer need it:
  91. browser_graphics.removeRenderer(myRender);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement