添加关照、全局等高线、修改图层问题
This commit is contained in:
85
static/sdk/three/jsm/nodes/gpgpu/ComputeNode.js
Normal file
85
static/sdk/three/jsm/nodes/gpgpu/ComputeNode.js
Normal file
@ -0,0 +1,85 @@
|
||||
import Node, { addNodeClass } from '../core/Node.js';
|
||||
import { NodeUpdateType } from '../core/constants.js';
|
||||
import { addNodeElement, nodeObject } from '../shadernode/ShaderNode.js';
|
||||
|
||||
class ComputeNode extends Node {
|
||||
|
||||
constructor( computeNode, count, workgroupSize = [ 64 ] ) {
|
||||
|
||||
super( 'void' );
|
||||
|
||||
this.isComputeNode = true;
|
||||
|
||||
this.computeNode = computeNode;
|
||||
|
||||
this.count = count;
|
||||
this.workgroupSize = workgroupSize;
|
||||
this.dispatchCount = 0;
|
||||
|
||||
this.version = 1;
|
||||
this.updateBeforeType = NodeUpdateType.OBJECT;
|
||||
|
||||
this.updateDispatchCount();
|
||||
|
||||
}
|
||||
|
||||
dispose() {
|
||||
|
||||
this.dispatchEvent( { type: 'dispose' } );
|
||||
|
||||
}
|
||||
|
||||
set needsUpdate( value ) {
|
||||
|
||||
if ( value === true ) this.version ++;
|
||||
|
||||
}
|
||||
|
||||
updateDispatchCount() {
|
||||
|
||||
const { count, workgroupSize } = this;
|
||||
|
||||
let size = workgroupSize[ 0 ];
|
||||
|
||||
for ( let i = 1; i < workgroupSize.length; i ++ )
|
||||
size *= workgroupSize[ i ];
|
||||
|
||||
this.dispatchCount = Math.ceil( count / size );
|
||||
|
||||
}
|
||||
|
||||
onInit() { }
|
||||
|
||||
updateBefore( { renderer } ) {
|
||||
|
||||
renderer.compute( this );
|
||||
|
||||
}
|
||||
|
||||
generate( builder ) {
|
||||
|
||||
const { shaderStage } = builder;
|
||||
|
||||
if ( shaderStage === 'compute' ) {
|
||||
|
||||
const snippet = this.computeNode.build( builder, 'void' );
|
||||
|
||||
if ( snippet !== '' ) {
|
||||
|
||||
builder.addLineFlowCode( snippet );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default ComputeNode;
|
||||
|
||||
export const compute = ( node, count, workgroupSize ) => nodeObject( new ComputeNode( nodeObject( node ), count, workgroupSize ) );
|
||||
|
||||
addNodeElement( 'compute', compute );
|
||||
|
||||
addNodeClass( 'ComputeNode', ComputeNode );
|
Reference in New Issue
Block a user