perf.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. (function () {
  2. var snippetUrl = "https://babylonjs-api2.azurewebsites.net/snippets";
  3. var currentSnippetToken;
  4. var engine;
  5. var scripts;
  6. var zipCode;
  7. BABYLON.Engine.ShadersRepository = "/src/Shaders/";
  8. var loadScript = function (scriptURL, title) {
  9. var xhr = new XMLHttpRequest();
  10. xhr.open('GET', scriptURL, true);
  11. xhr.onreadystatechange = function () {
  12. if (xhr.readyState === 4) {
  13. if (xhr.status === 200) {
  14. blockEditorChange = true;
  15. console.log(xhr.responseText);
  16. jsEditor.setValue(xhr.responseText);
  17. jsEditor.setPosition({ lineNumber: 0, column: 0 });
  18. blockEditorChange = false;
  19. compileAndRun();
  20. document.getElementById("currentScript").innerHTML = title;
  21. currentSnippetToken = null;
  22. }
  23. }
  24. };
  25. xhr.send(null);
  26. };
  27. var showError = function(error) {
  28. console.warn(error);
  29. };
  30. compileAndRun = function (code) {
  31. try {
  32. if (!BABYLON.Engine.isSupported()) {
  33. showError("Your browser does not support WebGL");
  34. return;
  35. }
  36. if (engine) {
  37. engine.dispose();
  38. engine = null;
  39. }
  40. var canvas = document.getElementById("renderCanvas");
  41. engine = new BABYLON.Engine(canvas, true, {stencil: true});
  42. engine.renderEvenInBackground = false;
  43. BABYLON.Camera.ForceAttachControlToAlwaysPreventDefault = true;
  44. engine.runRenderLoop(function () {
  45. if (engine.scenes.length === 0) {
  46. return;
  47. }
  48. if (canvas.width !== canvas.clientWidth) {
  49. engine.resize();
  50. }
  51. var scene = engine.scenes[0];
  52. if (scene.activeCamera || scene.activeCameras.length > 0) {
  53. scene.render();
  54. }
  55. });
  56. var scene;
  57. if (code.indexOf("createScene") !== -1) { // createScene
  58. eval(code);
  59. scene = createScene();
  60. if (!scene) {
  61. showError("createScene function must return a scene.");
  62. return;
  63. }
  64. zipCode = code + "\r\n\r\nvar scene = createScene();";
  65. } else if (code.indexOf("CreateScene") !== -1) { // CreateScene
  66. eval(code);
  67. scene = CreateScene();
  68. if (!scene) {
  69. showError("CreateScene function must return a scene.");
  70. return;
  71. }
  72. zipCode = code + "\r\n\r\nvar scene = CreateScene();";
  73. } else if (code.indexOf("createscene") !== -1) { // createscene
  74. eval(code);
  75. scene = createscene();
  76. if (!scene) {
  77. showError("createscene function must return a scene.");
  78. return;
  79. }
  80. zipCode = code + "\r\n\r\nvar scene = createscene();";
  81. } else { // Direct code
  82. scene = new BABYLON.Scene(engine);
  83. eval("runScript = function(scene, canvas) {" + code + "}");
  84. runScript(scene, canvas);
  85. zipCode = "var scene = new BABYLON.Scene(engine);\r\n\r\n" + code;
  86. }
  87. } catch (e) {
  88. // showError(e.message);
  89. }
  90. };
  91. window.addEventListener("resize", function () {
  92. if (engine) {
  93. engine.resize();
  94. }
  95. });
  96. // UI
  97. var cleanHash = function () {
  98. var splits = decodeURIComponent(location.hash.substr(1)).split("#");
  99. if (splits.length > 2) {
  100. splits.splice(2, splits.length - 2);
  101. }
  102. location.hash = splits.join("#");
  103. };
  104. var checkHash = function () {
  105. if (location.hash) {
  106. cleanHash();
  107. try {
  108. var xmlHttp = new XMLHttpRequest();
  109. xmlHttp.onreadystatechange = function () {
  110. if (xmlHttp.readyState === 4) {
  111. if (xmlHttp.status === 200) {
  112. var snippetCode = JSON.parse(JSON.parse(xmlHttp.responseText)[0].jsonPayload).code;
  113. compileAndRun(snippetCode);
  114. }
  115. }
  116. };
  117. var hash = location.hash.substr(1);
  118. currentSnippetToken = hash.split("#")[0];
  119. if(!hash.split("#")[1]) hash += "#0";
  120. xmlHttp.open("GET", snippetUrl + "/" + hash.replace("#", "/"));
  121. xmlHttp.send();
  122. } catch (e) {
  123. }
  124. }
  125. };
  126. checkHash();
  127. })();