12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import { WebGLNodeBuilder } from './WebGLNodeBuilder.js';
- import { NodeFrame } from 'three/nodes';
- import { Material } from 'three';
- const builders = new WeakMap();
- export const nodeFrame = new NodeFrame();
- Material.prototype.onBuild = function ( object, parameters, renderer ) {
- if ( object.material.isNodeMaterial === true ) {
- builders.set( this, new WebGLNodeBuilder( object, renderer, parameters ).build() );
- }
- };
- Material.prototype.onBeforeRender = function ( renderer, scene, camera, geometry, object ) {
- const nodeBuilder = builders.get( this );
- if ( nodeBuilder !== undefined ) {
- nodeFrame.material = this;
- nodeFrame.camera = camera;
- nodeFrame.object = object;
- nodeFrame.renderer = renderer;
- const updateNodes = nodeBuilder.updateNodes;
- if ( updateNodes.length > 0 ) {
- // force refresh material uniforms
- renderer.state.useProgram( null );
- //this.uniformsNeedUpdate = true;
- for ( const node of updateNodes ) {
- nodeFrame.updateNode( node );
- }
- }
- }
- };
|