Skip to content

Commit 688b749

Browse files
authoredSep 27, 2023
WebGLNodeBuilder: Fix Multi-Material (#26841)
1 parent bf7a89e commit 688b749

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed
 

‎examples/jsm/nodes/core/NodeBuilder.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ const toFloat = ( value ) => {
5050

5151
class NodeBuilder {
5252

53-
constructor( object, renderer, parser, scene = null ) {
53+
constructor( object, renderer, parser, scene = null, material = null ) {
5454

5555
this.object = object;
56-
this.material = ( object && object.material ) || null;
56+
this.material = material || ( object && object.material ) || null;
5757
this.geometry = ( object && object.geometry ) || null;
5858
this.renderer = renderer;
5959
this.parser = parser;

‎examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ function getShaderStageProperty( shaderStage ) {
3838

3939
class WebGLNodeBuilder extends NodeBuilder {
4040

41-
constructor( object, renderer, shader ) {
41+
constructor( object, renderer, shader, material = null ) {
4242

43-
super( object, renderer, new GLSLNodeParser() );
43+
super( object, renderer, new GLSLNodeParser(), null, material );
4444

4545
this.shader = shader;
4646
this.slots = { vertex: [], fragment: [] };

‎examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js

+14-2
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,21 @@ export const nodeFrame = new NodeFrame();
88

99
Material.prototype.onBuild = function ( object, parameters, renderer ) {
1010

11-
if ( object.material.isNodeMaterial === true ) {
11+
if ( Array.isArray( object.material ) ) {
1212

13-
builders.set( this, new WebGLNodeBuilder( object, renderer, parameters ).build() );
13+
for ( const material of object.material ) {
14+
15+
if ( material.isNodeMaterial === true ) {
16+
17+
builders.set( material, new WebGLNodeBuilder( object, renderer, parameters, material ).build() );
18+
19+
}
20+
21+
}
22+
23+
} else if ( object.material.isNodeMaterial === true ) {
24+
25+
builders.set( object.material, new WebGLNodeBuilder( object, renderer, parameters ).build() );
1426

1527
}
1628

0 commit comments

Comments
 (0)
Please sign in to comment.