threejs-offscreencanvas.html 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <!-- Licensed under a BSD license. See license.html for license -->
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
  7. <title>Three.js - OffscreenCanvas</title>
  8. <style>
  9. body {
  10. margin: 0;
  11. }
  12. #c {
  13. width: 100vw;
  14. height: 100vh;
  15. display: block;
  16. }
  17. #noOffscreenCanvas {
  18. display: flex;
  19. width: 100vw;
  20. height: 100vh;
  21. align-items: center;
  22. justify-content: center;
  23. background: red;
  24. color: white;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <canvas id="c"></canvas>
  30. <div id="noOffscreenCanvas" style="display:none;">
  31. <div>no OffscreenCanvas support</div>
  32. </div>
  33. </body>
  34. <script>
  35. 'use strict'; // eslint-disable-line
  36. function main() { /* eslint consistent-return: 0 */
  37. const canvas = document.querySelector('#c');
  38. if (!canvas.transferControlToOffscreen) {
  39. canvas.style.display = 'none';
  40. document.querySelector('#noOffscreenCanvas').style.display = '';
  41. return;
  42. }
  43. const offscreen = canvas.transferControlToOffscreen();
  44. const worker = new Worker('offscreencanvas-cubes.js');
  45. worker.postMessage({type: 'main', canvas: offscreen}, [offscreen]);
  46. function sendSize() {
  47. worker.postMessage({
  48. type: 'size',
  49. width: canvas.clientWidth,
  50. height: canvas.clientHeight,
  51. });
  52. }
  53. window.addEventListener('resize', sendSize);
  54. sendSize();
  55. }
  56. main();
  57. </script>
  58. </html>