Pixi.js: рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдХреНрд░рд┐рдп WebGL рдкреНрд░рд╕рдВрдЧ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рджрд┐рд╕ре░ 2015  ┬╖  29рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pixijs/pixi.js

рдореИрдВ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдПрдХ рдРрдк рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдкрд┐рдХреНрд╕реА.рдЬреЗрдПрд╕, рдереНрд░реА.рдЬреЗрдПрд╕ рдЖрджрд┐ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдлреНрд░реЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдореБрдЭреЗ рдЦреБрдж рдХреЗ рдмрд╛рдж рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдП рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдореИрдВ рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдПрдХ рд░реЗрдВрдбрд░рд░ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ)ред

рдбрдореА рдХреЛрдб

if renderer
    renderer.destroy(true);
    renderer = null

renderer = new PIXI.autoDetectRenderer ......

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╡реЗрдмрдЬреАрдПрд▓ рд░реЗрдВрдбрд░рд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд╛рдл рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ 16 рдкреЗрдЬ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИ рдХрд┐ WARNING: Too many active WebGL contexts. Oldest context will be lost. рдпрд╣ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдИрдкреИрдб рдкрд░ рдпрд╣ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ: X A problem occurred with this web page, so it was reloaded. ред

рдореИрдВ рддреАрдиj рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╡реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдирд┐рдореНрди рдХреЛрдб рд╣реИ

рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рдореБрдЭреЗ рдореИрдк рдУрд╡рд░рд▓реЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдбреЛрдо рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рд╕рдВрджрд░реНрдн рд╣рд╛рдирд┐ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

gl.getExtension('WEBGL_lose_context').loseContext();

рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

var document = require('global/document');
var PIXI = require('pixi.js');

// I want to keep this canvas / renderer around. For example, this might be a bottom layer PIXI / React map overlay.
var canvas1 = document.createElement('canvas');
document.body.appendChild(canvas1);
createRenderer(0xff0000, canvas1);

function createRenderer(color, canvas) {
  canvas = canvas || document.createElement('canvas');
  var renderer = new PIXI.WebGLRenderer(800, 600, {view: canvas});
  var stage = new PIXI.Container();
  var graphics = new PIXI.Graphics();
  graphics.beginFill(color, 0.5);
  graphics.drawCircle(0, 0, 200);
  graphics.endFill();
  stage.addChild(graphics);
  renderer.render(stage);
  return {renderer: renderer, stage: stage, graphics: graphics};
}

// Simulate frequent adding / removing of lots of PIXI / React map overlays on top.
for (var i = 0; i < 16; i++) {
  var canvas = document.createElement('canvas');
  document.body.appendChild(canvas);
  var scene = createRenderer(0x00ff00, canvas);
  // Uncomment to see that the original canvas isn't removed.
  /* scene.renderer.currentRenderTarget.gl
      .getExtension('WEBGL_lose_context').loseContext(); */
  scene.renderer.destroy();
  scene.stage.removeChild(scene.graphics);
  document.body.removeChild(canvas);
}

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ PIXI рдХреЛ рдЗрд╕реЗ рдЕрдкрдиреА "рдирд╖реНрдЯ" рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕рднреА 29 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@andrevenancio
рдореИрдВ рдкрд┐рдХреНрд╕реА рджреЗрдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕реЛрдорд╡рд╛рд░ рдпрд╛ рдордВрдЧрд▓рд╡рд╛рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдкреНрд░рдпреЛрдЧреЛрдВ ( рдЗрд╕ рддрд░рд╣ ) рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд░реЗрдВрдбрд░рд░реНрд╕ рдФрд░ рдХреИрдирд╡рд╕ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд░реЗрдВрдбрд░рд░ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╣реЛрдЧрд╛, рдФрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦреЗрдЧрд╛ред рдлрд┐рд░ рдЬрдм рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рддреЛ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рдЪрд░рдг рдХреЛ рд░реЗрдВрдбрд░рд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред

var renderer = PIXI.autoDetectRenderer({blah});
var experiments = [];
experiments.push(experiment1);
experiments.push(experiment2);
experiments.push(experiment3);

var currentExperiment = $('#experminetSelector').val();
renderer.render(experiments[currentExperiment]);

рдЗрд╕ рддрд░рд╣ рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд░реЗрдВрдбрд░рд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧ рд╕реЗ рд╕реНрдЯреЗрдЬ рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдпреЛрдЧ рдкреГрд╖реНрда рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдФрд░ рдЙрд╕ рдкрд░ рд╕рднреА рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВред

рдЕрд╕реНрд╡реАрдХрд░рдг: рдореИрдВ рдкрд┐рдХреНрд╕реА рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕реЗ рдЖрдЬрдорд╛рдпрд╛ рдирд╣реАрдВ, рдЖрдкрдХрд╛ рдорд╛рдЗрд▓реЗрдЬ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА рдпрд╣ рдЕрднреА рднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмрдЧ рдорд┐рд▓ рдЧрдИ рд╣реИ рдЬрд┐рд╕реЗ рд╢рд╛рдпрдж рджреЗрд╡ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдПрдХрд▓ рд░реЗрдВрдбрд░рд░ рдФрд░ рдПрдХрд╛рдзрд┐рдХ рджреГрд╢реНрдп рд╣реЛрдирд╛ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред 1 рд░реЗрдВрдбрд░рд░ === 1 рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ред

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред @samuraiseoul рдЖрдк рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрдИ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реВрдВ ... рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдпреЛрдЧ pixi.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред threejs рдпрд╛ рд╕рд╛рджреЗ WebGLред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрд╕рдХреЗ рдКрдкрд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдкреБрд░рд╛рдиреЗ рдкреНрд░рдпреЛрдЧ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирдпрд╛ рдкреНрд░рдпреЛрдЧ, рдПрдХ рд╕рд╛рде рдкреНрд░рддрд┐рдкрд╛рджрди, рдЗрд╕рд▓рд┐рдП рдПрдХ рд░реЗрдВрдбрд░рд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЬреАрддрд╛ рдХрд╛рдо рдирд╣реАрдВ ....

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛.... рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд╕реНрд╡рдпрдВ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ... рдпрджрд┐ .destroy() рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ webgl рд╕рдВрджрд░реНрдн рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ... рддреЛ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? :(

рдпреЛ рджреЛрд╕реНрдд! рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдирд╖реНрдЯ рдХрд╛рд░реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ :)

рдореИрдВ рднрдЯрдХрддрд╛ рд╣реВрдБ, рдХреНрдпрд╛ рдЖрдк autodetectRenderer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡реЗрдмрдЬреАрдПрд▓ рд╕рдХреНрд╖рдо рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд╕рдВрджрд░реНрдн рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА: рдЖрдк рд╡реЗрдмрд▓реЙрдЧ рд╕рдВрджрд░реНрдн рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рдХрдЪрд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЬрдм рддрдХ рдХрд┐ рдХреБрдЫ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ?)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рд░рдЦреЗ рдЧрдП рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ (рдЬреЛ рд╕рдВрджрд░реНрдн рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ) рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рд▓реАрдХ рд╣реЛ рд░рд╣реЗ рд╣реЛрдВ, рдпрд╛ рд╡реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рддреЗрдЬрд╝реА рд╕реЗ рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реЛрдВред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рджреЗрд╡ рдЙрдкрдХрд░рдг рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд▓реАрдХ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ? рд╢рд╛рдпрдж рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХреБрдЫ рд╕рдВрджрд░реНрдн рдХреЛ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рдЦ рд░рд╣рд╛ рд╣реИ .. рд╢рд╛рдпрдж рдПрдХ рдЬреЗрдПрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдЬреЗрдПрд╕ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреИрдирд╡рд╛рд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ?

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЕрднреА рднреА iframes рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ рдЪрд╛рд╣реЗ рдХреБрдЫ рднреА рд╣реЛред

@GoodBoyDigital рдореИрдВ рдЗрд╕ рддрд░рд╣ autodetectRenderer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

<strong i="9">@renderer</strong> = new PIXI.autoDetectRenderer canvas.width, canvas.height, { view: canvas, antialias: false, backgroundColor: 0xffffff }

рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛ рдХрд┐ рдЬрдм рдореБрдЭреЗ рдПрдХ рдорд┐рд▓рд╛ рддреЛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ .. рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдЦреЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ .. рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ :)

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдореИрдВ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкрд┐рдХреНрд╕реА рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЕрдХреНрд╕рд░ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдореИрдВ рд╕реНрдореГрддрд┐ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВред рдЗрд╕ рд╕рдордп рдкреНрд░рддреНрдпреЗрдХ WebGL рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреЛрдЗ рдкреНрд░рдЧрддрд┐?

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдлреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд┐рдХреНрд╕реА рдХреЗ рд░реЗрдВрдбрд░рд░ рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреЛ рдирд╖реНрдЯ рдХрд░реЗрдВред

рдЕрднреА рддрдХ рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВред рдпрджрд┐ рдЖрдк рдпрд╛ рддреЛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд░реЗрдВрдбрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛, рдХреЗрд╡рд▓ рдПрдХ рдЖрдИрдлреНрд░реЗрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдордЧреНрд░реА рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рд▓рдЯрдХ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдареАрдХ рд╕реЗ рдирд┐рдкрдЯрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЕрд░реЗ рдЭрд╛рдБрдХ, рд╣рд╛рдБ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рд╣рдо рдПрдХ рд╕рдВрджрд░реНрдн рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рд╕рдВрднрд╡ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рддреЛ рд╕рднреА рдмрдирд╛рд╡рдЯ/рдХрд╛рд░реНрдпрдХреНрд░рдо arraybuffers ect рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╢рд╛рдпрдж рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рд╣рдо рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ?

рдЕрд░реЗ @GoodBoyDigital рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдиреАрдореЗрд╢рди рдерд╛/рдмрд╛рд╣рд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ 2 рд╕рдВрджрд░реНрднреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА ... рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдкреВрд░реНрдг рдкрд┐рдХреНрд╕реА рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ ... рдкреНрд░рддрд┐ рдХрд╣рддреЗ рд╣реИрдВ .. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддрд░рд╣ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ ... рдпрд╣ рднреА рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рддреАрди рд╕реЗ рд╣реИрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬреЗрдПрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рд╢рд╛рдпрдж рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡реА 4 рдкрд░ рдЬрд╛рдиреЗ рджреЗрдВ рдФрд░ рдкрд┐рдХреНрд╕реА рдХреЗ рд╕рд╛рде 16+ рдЯреИрдм рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js#L289

рдЕрдиреНрдпрдерд╛ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рджреЛрд╕реНрдд, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рдРрдк рдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ ... iframe FTW :)

рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдпрд╛рд░! рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ three.js рдЯреНрд░рд┐рдХ рдХреЛ рднреА рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ред

рдореБрдЭреЗ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рд╕реНрддреБрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣реА рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдореМрдЬреВрджрд╛ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдб рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдкреВрд░реНрд╡ рд▓рд┐рдЦрд┐рдд рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рдореБрдЭреЗ рдореИрдк рдУрд╡рд░рд▓реЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдбреЛрдо рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣ рд╕рдВрджрд░реНрдн рд╣рд╛рдирд┐ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

gl.getExtension('WEBGL_lose_context').loseContext();

рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

var document = require('global/document');
var PIXI = require('pixi.js');

// I want to keep this canvas / renderer around. For example, this might be a bottom layer PIXI / React map overlay.
var canvas1 = document.createElement('canvas');
document.body.appendChild(canvas1);
createRenderer(0xff0000, canvas1);

function createRenderer(color, canvas) {
  canvas = canvas || document.createElement('canvas');
  var renderer = new PIXI.WebGLRenderer(800, 600, {view: canvas});
  var stage = new PIXI.Container();
  var graphics = new PIXI.Graphics();
  graphics.beginFill(color, 0.5);
  graphics.drawCircle(0, 0, 200);
  graphics.endFill();
  stage.addChild(graphics);
  renderer.render(stage);
  return {renderer: renderer, stage: stage, graphics: graphics};
}

// Simulate frequent adding / removing of lots of PIXI / React map overlays on top.
for (var i = 0; i < 16; i++) {
  var canvas = document.createElement('canvas');
  document.body.appendChild(canvas);
  var scene = createRenderer(0x00ff00, canvas);
  // Uncomment to see that the original canvas isn't removed.
  /* scene.renderer.currentRenderTarget.gl
      .getExtension('WEBGL_lose_context').loseContext(); */
  scene.renderer.destroy();
  scene.stage.removeChild(scene.graphics);
  document.body.removeChild(canvas);
}

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ PIXI рдХреЛ рдЗрд╕реЗ рдЕрдкрдиреА "рдирд╖реНрдЯ" рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ (v3)ред

рдлрдВрдХреНрд╢рди рдореЗрдВ рд╣реИWebGLSupported() (source/core/utils/index.js) рд░рд┐рдкреНрд▓реЗрд╕
return !!(gl && gl.getContextAttributes().stencil);

рд╕рд╛рде
var success = !!(gl && gl.getContextAttributes().stencil); gl.getExtension('WEBGL_lose_context').loseContext(); gl = undefined; return success;

рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рддрдп рдХреАред рдпрд╣ Google рдХреНрд░реЛрдо рдореЗрдВ рд╕рдмрд╕реЗ рдкреНрд░рдореБрдЦ рдерд╛ - рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдиреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдПрдХ рд╡реЗрдмрдЬреАрдПрд▓ рдиреЛрдм рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реВрдВ, рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

рдЕрдЪреНрдЫреА рдХреЙрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп рдЬрдмрд░рди рд╕рдВрджрд░реНрдн рдЦреЛ рдЬрд╛рдирд╛, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ (резрежреж%) рдХрд┐ рд╣рдо рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рд╕реНрд╡рд╛рдореА рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд▓рдп рд╣реЛ рдЧрдпрд╛? рд╣рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рдкрд┐рдВрдЧ @englercj рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЕрдм рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

gl.getExtension('WEBGL_lose_context').loseContext() рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджрдмрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рдЦреЛрдиреЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ WEBGL_lose_context.restoreContext() рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рдирд╣реАрдВ рдерд╛ред

рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: loss_context() рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрдХрд░рдг рд╣реИ (рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рд▓реЗрдХрд┐рди рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ ( рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрдЬреАрдПрд▓: WEBGL_lose_context рд╣рдо рд╕реАрдЦрддреЗ рд╣реИрдВ (рдореЛрдЬрд╝рд┐рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдЬреЗрдл рдЧрд┐рд▓реНрдмрд░реНрдЯ рд╕реЗ) рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ loseContext() рд▓рд┐рдП рдПрдХ рдЙрдкрд╢рдмреНрдж рд╣реИ " рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдЬрд╛рд░реА рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗрд╕рдВрд╕рд╛рдзрди" ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рдПрдХ Google рдбреЗрд╡рд▓рдкрд░ (рдХреЗрди рд░рд╕реЗрд▓) рдХреА рдУрд░ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ:

рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рджрд┐рд▓рдЪрд╕реНрдк рдПрдлрдПрдл рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЛрдЯред рджрд░рдЕрд╕рд▓, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрди рдХреА рд╕рд▓рд╛рд╣ рдЬрд╛рдиреЗ рдХрд╛ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдПрдлрдПрдл рдХрдИ рд▓реЛрдХрдкреНрд░рд┐рдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдлрдПрдл рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реВрдЪрдирд╛ рдХреЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдФрд░ рдирдХрд▓реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реВрдБрдШрдиреЗ рдФрд░ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдкрде рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рддрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВ рдЖрдЬ рдЖрдИрдУрдПрд╕ рдкрд░ рдЕрдкрдиреЗ рдРрдк рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдЬреНрдЮрд╛рдд рдЙрдкрд╛рдп рд╣реИ? рдореЗрд░рд╛ рдкрд┐рдХреНрд╕реА рд╡реНрдпреВ рдореЗрд░реЗ рдРрдк рдкрд░ рдПрдХ рд╕реНрдХреНрд░реАрди рдХрд╛ рдЙрдк-рдШрдЯрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕ рдкреГрд╖реНрда рд╕реЗ рджреВрд░ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрд╕реА рд░реЗрдВрдбрд░рд░ рдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдХреЗ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдЕрд▓рдЧ/рд░реАрдЯреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рд╕рдорд╛рдзрд╛рди рдПрдХрд╛рдзрд┐рдХ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдмрдирд╛рдирд╛ рд╣реИред рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ рдЙрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдкреГрд╖реНрдареЛрдВ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╝рд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрда рдкрд░ рдХреНрдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдореНрдо, рддреЛ рдореИрдВ рд╕рдВрджрд░реНрдн рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдЙрдВрдЧрд╛? рдореИрдВ рдХреЛрдгреАрдп рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯрд┐рдВрдЧ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬреИрд╕реЗ, рдХреНрдпрд╛ рдореИрдВ рдбреАрдУрдПрдо рд╕реЗ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдлрд┐рд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдкреГрд╖реНрда рдореЗрдВ рдЕрдкрдиреА рдЬрдЧрд╣ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЬреЛрдбрд╝ рджреЗрдВ? рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ PIXI рдХреЗ рднреАрддрд░ "рдЗрд╕ рдореМрдЬреВрджрд╛ рд░реЗрдВрдбрд░рд░ + рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдирдП рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ" рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдкрд┐рдХреНрд╕реА рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреЗрдЬ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдИ рдмрд╛рд░ рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореБрдЦреНрдп рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдПрдХ рдкреЗрдЬ рдХреЗ рдРрдк рдореЗрдВ PIXI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреАред

рдЖрдкрдХреЗ PIXI.Application/PIXI.WebGLRenderer/PIXI.CanvasRenderer рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЗ рдХреИрдирд╡рд╛рд╕ рдПрд▓рд┐рдореЗрдВрдЯ рдХрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рднреА рд╕реЗрд╡ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PIXI.Application рдореЗрдВ, рдЖрдк view рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ HTMLCanvasElement рд╣реИред рдЖрдк рдЗрд╕ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ AngularJS/React рдРрдк рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред PIXI рдореЗрдВ рдЖрдк рд░реЗрдВрдбрд░рд░ рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдЗрд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, PIXI рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ рдФрд░ рдмрд╕ рдХреБрдЫ DOM рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЪрд╛рдЗрд▓реНрдб рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред

<div id="pixi-container"></div>
// maintain the reference to this Application even as your SPA view gets destroyed
const app = new PIXI.Application();

// Insert in the DOM or whatever the equivalent is in Angular
document.querySelector("#pixi-container").appendChild(app.view);

рдареАрдХ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред

рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рджреГрд╢реНрдп рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдФрд░ рджреЛрдмрд╛рд░рд╛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ, рдорджрдж рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдХреГрдкрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Darker picture Darker  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

distinctdan picture distinctdan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SebastienFPRousseau picture SebastienFPRousseau  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sntiagomoreno picture sntiagomoreno  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

madroneropaulo picture madroneropaulo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ