Browse Source

WebGPURenderer: Fix group draw range (#28163)

sunag 1 year ago
parent
commit
b8b67f25b4

+ 2 - 0
examples/jsm/renderers/common/RenderObject.js

@@ -56,6 +56,8 @@ export default class RenderObject {
 		this.geometry = object.geometry;
 		this.version = material.version;
 
+		this.drawRange = null;
+
 		this.attributes = null;
 		this.pipeline = null;
 		this.vertexBuffers = null;

+ 5 - 4
examples/jsm/renderers/common/Renderer.js

@@ -1325,16 +1325,16 @@ class Renderer {
 		if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
 
 			material.side = BackSide;
-			this._handleObjectFunction( object, material, scene, camera, lightsNode, 'backSide' ); // create backSide pass id
+			this._handleObjectFunction( object, material, scene, camera, lightsNode, group, 'backSide' ); // create backSide pass id
 
 			material.side = FrontSide;
-			this._handleObjectFunction( object, material, scene, camera, lightsNode ); // use default pass id
+			this._handleObjectFunction( object, material, scene, camera, lightsNode, group ); // use default pass id
 
 			material.side = DoubleSide;
 
 		} else {
 
-			this._handleObjectFunction( object, material, scene, camera, lightsNode );
+			this._handleObjectFunction( object, material, scene, camera, lightsNode, group );
 
 		}
 
@@ -1364,9 +1364,10 @@ class Renderer {
 
 	}
 
-	_renderObjectDirect( object, material, scene, camera, lightsNode, passId ) {
+	_renderObjectDirect( object, material, scene, camera, lightsNode, group, passId ) {
 
 		const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
+		renderObject.drawRange = group || object.geometry.drawRange;
 
 		//
 

+ 1 - 1
examples/jsm/renderers/webgl/WebGLBackend.js

@@ -615,7 +615,7 @@ class WebGLBackend extends Backend {
 		const index = renderObject.getIndex();
 
 		const geometry = renderObject.geometry;
-		const drawRange = geometry.drawRange;
+		const drawRange = renderObject.drawRange;
 		const firstVertex = drawRange.start;
 
 		//

+ 1 - 1
examples/jsm/renderers/webgpu/WebGPUBackend.js

@@ -871,7 +871,7 @@ class WebGPUBackend extends Backend {
 
 		// draw
 
-		const drawRange = geometry.drawRange;
+		const drawRange = renderObject.drawRange;
 		const firstVertex = drawRange.start;
 
 		const instanceCount = this.getInstanceCount( renderObject );