Browse Source

Fix WebGL in the Webgpu lib

Sebastien Vandenberghe 6 years ago
parent
commit
7226db2079

+ 1 - 3
src/Cameras/camera.ts

@@ -331,6 +331,7 @@ export class Camera extends Node {
      * Transfer the camera values to its UBO.
      */
     public transferToEffect(): void {
+        // TODO WEBGPU. Check if we could split scene and Camera ubo.
         const ubo = this._uniformBuffer;
         const scene = this.getScene();
 
@@ -351,9 +352,6 @@ export class Camera extends Node {
         ubo.updateVector3("vEyePosition", scene._mirroredCameraPosition ? scene._mirroredCameraPosition : globalPosition);
 
         ubo.update();
-        
-        // TODO WEBGPU.
-        scene.getEngine().bindUniformBufferBase(ubo.getBuffer()!, 0, "Camera");
     }
 
     /**

+ 5 - 0
src/Materials/PBR/pbrBaseMaterial.ts

@@ -1641,6 +1641,11 @@ export abstract class PBRBaseMaterial extends PushMaterial {
         // Matrices
         mesh.getMeshUniformBuffer().bindToEffect(effect, "Mesh");
 
+        // Matrices
+        if (!defines.INSTANCES) {
+            this.bindOnlyWorldMatrix(world);
+        }
+
         // Normal Matrix
         if (defines.OBJECTSPACE_NORMALMAP) {
             world.toNormalMatrix(this._normalMatrix);

+ 1 - 3
src/Meshes/mesh.ts

@@ -1610,9 +1610,7 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData {
         var world = effectiveMesh.getWorldMatrix();
 
         // TODO WEBGPU. Find a better approach.
-        if (engine.isWebGPU) {
-            this.transferToEffect(world);
-        }
+        this.transferToEffect(world);
 
         if (this._effectiveMaterial._storeEffectOnSubMeshes) {
             this._effectiveMaterial.bindForSubMesh(world, this, subMesh);

+ 12 - 3
src/Shaders/ShadersInclude/pbrUboDeclaration.fx

@@ -23,7 +23,10 @@ layout(std140, column_major) uniform;
 //     uniform vec3 vSphericalZX;
 // }
 
-layout(set = 0, binding = 0) uniform Scene {
+#ifdef WEBGPU
+layout(set = 0, binding = 0) 
+#endif
+uniform Scene {
     mat4 viewProjection;
 #ifdef MULTIVIEW
 	mat4 viewProjectionR;
@@ -31,7 +34,10 @@ layout(set = 0, binding = 0) uniform Scene {
     mat4 view;
 };
 
-layout(set = 1, binding = 0) uniform Material
+#ifdef WEBGPU
+layout(set = 1, binding = 0) 
+#endif
+uniform Material
 {
     uniform vec2 vAlbedoInfos;
     uniform vec4 vAmbientInfos;
@@ -117,7 +123,10 @@ layout(set = 1, binding = 0) uniform Material
     uniform vec3 vSphericalZX;
 };
 
-layout(set = 2, binding = 0) uniform Mesh {
+#ifdef WEBGPU
+layout(set = 2, binding = 0) 
+#endif
+uniform Mesh {
     mat4 world;
     float visibility;
 };

+ 0 - 5
src/scene.ts

@@ -3508,11 +3508,6 @@ export class Scene extends AbstractScene implements IAnimatable {
         // Render
         this.onBeforeDrawPhaseObservable.notifyObservers(this);
 
-        // TODO WEBGPU. Find a better approach.
-        if (engine.isWebGPU) {
-            camera.transferToEffect();
-        }
-
         this._renderingManager.render(null, null, true, true);
         this.onAfterDrawPhaseObservable.notifyObservers(this);