WebGPUNodeBuilder.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import NodeSlot from '../nodes/core/NodeSlot.js';
  2. import NodeBuilder from '../nodes/core/NodeBuilder.js';
  3. class WebGPUNodeBuilder extends NodeBuilder {
  4. constructor() {
  5. super();
  6. }
  7. buildShader( shader, code ) {
  8. // use regex maybe for security?
  9. const versionStrIndex = code.indexOf("\n");
  10. let shaderCode = code.substr( 0, versionStrIndex ) + "\n";
  11. let shaderData = this.build( shader );
  12. shaderCode += shaderData.defines;
  13. shaderCode += code.substr( versionStrIndex );
  14. console.log( shaderCode );
  15. return shaderCode;
  16. }
  17. parse( vertexShader, fragmentShader ) {
  18. const material = this.material;
  19. if ( material.isMeshBasicMaterial ) {
  20. if ( material.color.isNode ) {
  21. this.addSlot( 'fragment', new NodeSlot( material.color, 'COLOR', 'v3' ) );
  22. }
  23. }
  24. vertexShader = this.buildShader( 'vertex', vertexShader );
  25. fragmentShader = this.buildShader( 'fragment', fragmentShader );
  26. return {
  27. vertexShader,
  28. fragmentShader
  29. };
  30. }
  31. }
  32. export default WebGPUNodeBuilder;