Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions examples/webgpu_clipping.html
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,6 @@
color: 0x80ee10,
shininess: 0,
side: THREE.DoubleSide,

// ***** Clipping setup (material): *****
alphaToCoverage: true
} );

Expand Down
14 changes: 2 additions & 12 deletions src/materials/nodes/NodeMaterial.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,16 +84,6 @@ class NodeMaterial extends Material {
*/
this.lights = false;

/**
* Whether this material uses hardware clipping or not.
* This property is managed by the engine and should not be
* modified by apps.
*
* @type {boolean}
* @default false
*/
this.hardwareClipping = false;

/**
* Node materials which set their `lights` property to `true`
* are affected by all lights of the scene. Sometimes selective
Expand Down Expand Up @@ -656,7 +646,7 @@ class NodeMaterial extends Material {
*/
setupHardwareClipping( builder ) {

this.hardwareClipping = false;
builder.hardwareClipping = false;

if ( builder.clippingContext === null ) return;

Expand All @@ -668,7 +658,7 @@ class NodeMaterial extends Material {

builder.stack.addToStack( hardwareClipping() );

this.hardwareClipping = true;
builder.hardwareClipping = true;

}

Expand Down
2 changes: 1 addition & 1 deletion src/nodes/accessors/ClippingNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class ClippingNode extends Node {
const clippingContext = builder.clippingContext;
const { intersectionPlanes, unionPlanes } = clippingContext;

this.hardwareClipping = builder.material.hardwareClipping;
this.hardwareClipping = builder.hardwareClipping;

if ( this.scope === ClippingNode.ALPHA_TO_COVERAGE ) {

Expand Down
8 changes: 8 additions & 0 deletions src/nodes/core/NodeBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,14 @@ class NodeBuilder {
*/
this.clippingContext = null;

/**
* Whether the built material uses hardware clipping or not.
*
* @type {boolean}
* @default false
*/
this.hardwareClipping = false;

/**
* The generated vertex shader.
*
Expand Down
2 changes: 1 addition & 1 deletion src/renderers/common/RenderObject.js
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ class RenderObject {
*/
get hardwareClippingPlanes() {

return this.material.hardwareClipping === true ? this.clippingContext.unionClippingCount : 0;
return this.getNodeBuilderState().hardwareClipping === true ? this.clippingContext.unionClippingCount : 0;

}

Expand Down
10 changes: 9 additions & 1 deletion src/renderers/common/nodes/NodeBuilderState.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ class NodeBuilderState {
* @param {Array<Node>} updateBeforeNodes - An array of nodes that implement their `updateBefore()` method.
* @param {Array<Node>} updateAfterNodes - An array of nodes that implement their `updateAfter()` method.
* @param {NodeMaterialObserver} observer - A node material observer.
* @param {boolean} hardwareClipping - Whether the built material uses hardware clipping or not.
* @param {Array<Object>} transforms - An array with transform attribute objects. Only relevant when using compute shaders with WebGL 2.
*/
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, observer, transforms = [] ) {
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, observer, hardwareClipping, transforms = [] ) {

/**
* The native vertex shader code.
Expand Down Expand Up @@ -100,6 +101,13 @@ class NodeBuilderState {
*/
this.observer = observer;

/**
* Whether the built material uses hardware clipping or not.
*
* @type {boolean}
*/
this.hardwareClipping = hardwareClipping;

/**
* How often this state is used by render objects.
*
Expand Down
1 change: 1 addition & 0 deletions src/renderers/common/nodes/NodeManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,7 @@ class NodeManager extends DataMap {
nodeBuilder.updateBeforeNodes,
nodeBuilder.updateAfterNodes,
nodeBuilder.observer,
nodeBuilder.hardwareClipping,
nodeBuilder.transforms
);

Expand Down