Преглед изворни кода

WebGPURenderer: Create a single encoder and render pass.

Mugen87 пре 4 година
родитељ
комит
9021c89b60
1 измењених фајлова са 10 додато и 13 уклоњено
  1. 10 13
      examples/jsm/renderers/webgpu/WebGPURenderer.js

+ 10 - 13
examples/jsm/renderers/webgpu/WebGPURenderer.js

@@ -377,6 +377,11 @@ class WebGPURenderer {
 
 	_renderObjects( renderList, camera ) {
 
+		const device = this._device;
+
+		const cmdEncoder = device.createCommandEncoder( {} );
+		const passEncoder = cmdEncoder.beginRenderPass( this._renderPassDescriptor );
+
 		for ( let i = 0, l = renderList.length; i < l; i ++ ) {
 
 			const renderItem = renderList[ i ];
@@ -389,22 +394,19 @@ class WebGPURenderer {
 			this._objects.update( object );
 			this._bindings.update( object, camera );
 
-			this._renderObject( object );
+			this._renderObject( object, passEncoder );
 
 		}
 
+		passEncoder.endPass();
+		device.defaultQueue.submit( [ cmdEncoder.finish() ] );
+
 	}
 
-	_renderObject( object ) {
+	_renderObject( object, passEncoder ) {
 
-		const device = this._device;
 		const info = this._info;
 
-		// begin
-
-		const cmdEncoder = device.createCommandEncoder( {} );
-		const passEncoder = cmdEncoder.beginRenderPass( this._renderPassDescriptor );
-
 		// pipeline
 
 		const pipeline = this._renderPipelines.get( object );
@@ -480,11 +482,6 @@ class WebGPURenderer {
 
 		}
 
-		// end
-
-		passEncoder.endPass();
-		device.defaultQueue.submit( [ cmdEncoder.finish() ] );
-
 	}
 
 	_setupIndexBuffer( encoder, index ) {