ThorAILabs commited on
Commit
c23754d
·
verified ·
1 Parent(s): 8020f7e

try to fix webgpu init error

Browse files
Files changed (1) hide show
  1. index.html +78 -45
index.html CHANGED
@@ -12,7 +12,6 @@
12
  <script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/loaders/OBJLoader.min.js"></script>
13
  <script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/exporters/OBJExporter.min.js"></script>
14
  <script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/exporters/STLExporter.min.js"></script>
15
- <script src="https://cdn.jsdelivr.net/npm/webgpu-raytracing@latest/dist/webgpu-raytracing.umd.js"></script>
16
  <style>
17
  #renderCanvas {
18
  width: 100%;
@@ -263,7 +262,7 @@
263
  // Initialize Three.js scene
264
  let scene, camera, renderer, controls;
265
  let raytracingEnabled = false;
266
- let raytracingRenderer;
267
  let objects = [];
268
  let lights = [];
269
  let clock = new THREE.Clock();
@@ -314,34 +313,50 @@
314
  renderer.shadowMap.type = THREE.PCFSoftShadowMap;
315
  document.getElementById('renderCanvas').appendChild(renderer.domElement);
316
 
317
- // Initialize WebGPU raytracing renderer
318
- try {
319
- if (isWebGPUSupported()) {
320
- raytracingRenderer = new WebGPURaytracingRenderer({
321
- canvas: document.createElement('canvas'),
322
- width: window.innerWidth,
323
- height: window.innerHeight
324
- });
325
-
326
- await raytracingRenderer.init();
327
-
328
- // Configure raytracing settings
329
- raytracingRenderer.setBounces(3);
330
- raytracingRenderer.setSamples(4);
331
- raytracingRenderer.setDenoise(true);
332
-
333
- console.log("WebGPU Raytracing initialized successfully");
334
- } else {
335
- console.warn("WebGPU not supported in this browser");
336
- document.getElementById('toggleRaytracing').disabled = true;
337
- document.getElementById('toggleRaytracing').classList.add('opacity-50', 'cursor-not-allowed');
338
- document.getElementById('toggleRaytracing').title = "WebGPU not supported in your browser";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
  }
340
- } catch (e) {
341
- console.error("Failed to initialize WebGPU raytracing:", e);
342
- document.getElementById('toggleRaytracing').disabled = true;
343
- document.getElementById('toggleRaytracing').classList.add('opacity-50', 'cursor-not-allowed');
344
- document.getElementById('toggleRaytracing').title = "WebGPU not supported in your browser";
345
  }
346
 
347
  // Add orbit controls
@@ -373,6 +388,14 @@
373
  animate();
374
  }
375
 
 
 
 
 
 
 
 
 
376
  // Animation loop
377
  function animate() {
378
  requestAnimationFrame(animate);
@@ -389,21 +412,31 @@
389
 
390
  // Render scene
391
  if (raytracingEnabled && raytracingRenderer) {
392
- // Update raytracing renderer with current scene
393
- raytracingRenderer.setCamera(camera);
394
- raytracingRenderer.setScene(scene);
395
-
396
- // Render with raytracing
397
- raytracingRenderer.render();
398
-
399
- // Display the raytraced result
400
- renderer.domElement.style.display = 'none';
401
- raytracingRenderer.canvas.style.display = 'block';
402
- raytracingRenderer.canvas.style.width = '100%';
403
- raytracingRenderer.canvas.style.height = '100%';
404
-
405
- if (!document.getElementById('renderCanvas').contains(raytracingRenderer.canvas)) {
406
- document.getElementById('renderCanvas').appendChild(raytracingRenderer.canvas);
 
 
 
 
 
 
 
 
 
 
407
  }
408
  } else {
409
  // Regular rasterization rendering
@@ -455,7 +488,7 @@
455
 
456
  // Raytracing toggle
457
  document.getElementById('toggleRaytracing').addEventListener('click', () => {
458
- if (!isWebGPUSupported()) {
459
  document.getElementById('webgpuModal').classList.remove('hidden');
460
  return;
461
  }
 
12
  <script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/loaders/OBJLoader.min.js"></script>
13
  <script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/exporters/OBJExporter.min.js"></script>
14
  <script src="https://cdn.jsdelivr.net/npm/three@0.128.0/examples/js/exporters/STLExporter.min.js"></script>
 
15
  <style>
16
  #renderCanvas {
17
  width: 100%;
 
262
  // Initialize Three.js scene
263
  let scene, camera, renderer, controls;
264
  let raytracingEnabled = false;
265
+ let raytracingRenderer = null;
266
  let objects = [];
267
  let lights = [];
268
  let clock = new THREE.Clock();
 
313
  renderer.shadowMap.type = THREE.PCFSoftShadowMap;
314
  document.getElementById('renderCanvas').appendChild(renderer.domElement);
315
 
316
+ // Try to initialize WebGPU raytracing if supported
317
+ if (isWebGPUSupported()) {
318
+ try {
319
+ // Dynamically load the WebGPU raytracing library
320
+ const script = document.createElement('script');
321
+ script.src = 'https://cdn.jsdelivr.net/npm/webgpu-raytracing@latest/dist/webgpu-raytracing.umd.js';
322
+ script.onload = async () => {
323
+ try {
324
+ if (typeof WebGPURaytracingRenderer !== 'undefined') {
325
+ raytracingRenderer = new WebGPURaytracingRenderer({
326
+ canvas: document.createElement('canvas'),
327
+ width: window.innerWidth,
328
+ height: window.innerHeight
329
+ });
330
+
331
+ await raytracingRenderer.init();
332
+
333
+ // Configure raytracing settings
334
+ raytracingRenderer.setBounces(3);
335
+ raytracingRenderer.setSamples(4);
336
+ raytracingRenderer.setDenoise(true);
337
+
338
+ console.log("WebGPU Raytracing initialized successfully");
339
+ } else {
340
+ console.warn("WebGPU Raytracing library not available");
341
+ disableRaytracingUI();
342
+ }
343
+ } catch (e) {
344
+ console.error("Failed to initialize WebGPU raytracing:", e);
345
+ disableRaytracingUI();
346
+ }
347
+ };
348
+ script.onerror = () => {
349
+ console.warn("Failed to load WebGPU raytracing library");
350
+ disableRaytracingUI();
351
+ };
352
+ document.head.appendChild(script);
353
+ } catch (e) {
354
+ console.error("Error loading WebGPU raytracing:", e);
355
+ disableRaytracingUI();
356
  }
357
+ } else {
358
+ console.warn("WebGPU not supported in this browser");
359
+ disableRaytracingUI();
 
 
360
  }
361
 
362
  // Add orbit controls
 
388
  animate();
389
  }
390
 
391
+ // Disable raytracing UI when not available
392
+ function disableRaytracingUI() {
393
+ document.getElementById('toggleRaytracing').disabled = true;
394
+ document.getElementById('toggleRaytracing').classList.add('opacity-50', 'cursor-not-allowed');
395
+ document.getElementById('toggleRaytracing').title = "WebGPU raytracing not available";
396
+ document.getElementById('raytraceSettings').classList.add('hidden');
397
+ }
398
+
399
  // Animation loop
400
  function animate() {
401
  requestAnimationFrame(animate);
 
412
 
413
  // Render scene
414
  if (raytracingEnabled && raytracingRenderer) {
415
+ try {
416
+ // Update raytracing renderer with current scene
417
+ raytracingRenderer.setCamera(camera);
418
+ raytracingRenderer.setScene(scene);
419
+
420
+ // Render with raytracing
421
+ raytracingRenderer.render();
422
+
423
+ // Display the raytraced result
424
+ renderer.domElement.style.display = 'none';
425
+ raytracingRenderer.canvas.style.display = 'block';
426
+ raytracingRenderer.canvas.style.width = '100%';
427
+ raytracingRenderer.canvas.style.height = '100%';
428
+
429
+ if (!document.getElementById('renderCanvas').contains(raytracingRenderer.canvas)) {
430
+ document.getElementById('renderCanvas').appendChild(raytracingRenderer.canvas);
431
+ }
432
+ } catch (e) {
433
+ console.error("Raytracing render error:", e);
434
+ raytracingEnabled = false;
435
+ document.getElementById('renderMode').textContent = 'Rasterization';
436
+ renderer.domElement.style.display = 'block';
437
+ if (raytracingRenderer && raytracingRenderer.canvas) {
438
+ raytracingRenderer.canvas.style.display = 'none';
439
+ }
440
  }
441
  } else {
442
  // Regular rasterization rendering
 
488
 
489
  // Raytracing toggle
490
  document.getElementById('toggleRaytracing').addEventListener('click', () => {
491
+ if (!isWebGPUSupported() || !raytracingRenderer) {
492
  document.getElementById('webgpuModal').classList.remove('hidden');
493
  return;
494
  }