Просмотр исходного кода

TSL: Add `debug()` (#30797)

* introduce `debug()`

* cleanup

* add debug
sunag 9 месяцев назад
Родитель
Сommit
30c4024e5b
4 измененных файлов с 73 добавлено и 0 удалено
  1. 1 0
      src/Three.TSL.js
  2. 1 0
      src/nodes/Nodes.js
  3. 1 0
      src/nodes/tsl/TSLBase.js
  4. 70 0
      src/nodes/utils/DebugNode.js

+ 1 - 0
src/Three.TSL.js

@@ -129,6 +129,7 @@ export const cubeTexture = TSL.cubeTexture;
 export const dFdx = TSL.dFdx;
 export const dFdy = TSL.dFdy;
 export const dashSize = TSL.dashSize;
+export const debug = TSL.debug;
 export const defaultBuildStages = TSL.defaultBuildStages;
 export const defaultShaderStages = TSL.defaultShaderStages;
 export const defined = TSL.defined;

+ 1 - 0
src/nodes/Nodes.js

@@ -56,6 +56,7 @@ export { default as TriplanarTexturesNode } from './utils/TriplanarTexturesNode.
 export { default as ReflectorNode } from './utils/ReflectorNode.js';
 export { default as RTTNode } from './utils/RTTNode.js';
 export { default as MemberNode } from './utils/MemberNode.js';
+export { default as DebugNode } from './utils/DebugNode.js';
 
 // accessors
 export { default as UniformArrayNode } from './accessors/UniformArrayNode.js';

+ 1 - 0
src/nodes/tsl/TSLBase.js

@@ -23,6 +23,7 @@ export * from '../utils/RemapNode.js'; // .remap(), .remapClamp()
 export * from '../code/ExpressionNode.js'; // expression()
 export * from '../utils/Discard.js'; // Discard(), Return()
 export * from '../display/RenderOutputNode.js'; // .renderOutput()
+export * from '../utils/DebugNode.js'; // debug()
 
 export function addNodeElement( name/*, nodeElement*/ ) {
 

+ 70 - 0
src/nodes/utils/DebugNode.js

@@ -0,0 +1,70 @@
+import TempNode from '../core/TempNode.js';
+import { addMethodChaining, nodeObject } from '../tsl/TSLCore.js';
+
+class DebugNode extends TempNode {
+
+	static get type() {
+
+		return 'DebugNode';
+
+	}
+
+	constructor( node, callback = null ) {
+
+		super();
+
+		this.node = node;
+		this.callback = callback;
+
+	}
+
+	getNodeType( builder ) {
+
+		return this.node.getNodeType( builder );
+
+	}
+
+	setup( builder ) {
+
+		return this.node.build( builder );
+
+	}
+
+	analyze( builder ) {
+
+		return this.node.build( builder );
+
+	}
+
+	generate( builder ) {
+
+		const callback = this.callback;
+		const snippet = this.node.build( builder );
+
+		let code = '';
+		code += '// #--- TSL Debug ---#\n';
+		code += builder.flow.code.replace( /\t/g, '' ) + '\n';
+		code += '/* ... */ ' + snippet + ' /* ... */\n';
+		code += '// #-----------------#\n';
+
+		if ( callback !== null ) {
+
+			callback( code );
+
+		} else {
+
+			console.log( code );
+
+		}
+
+		return snippet;
+
+	}
+
+}
+
+export default DebugNode;
+
+export const debug = ( node, callback = null ) => nodeObject( new DebugNode( nodeObject( node ), callback ) );
+
+addMethodChaining( 'debug', debug );

粤ICP备19079148号