|
@@ -9,6 +9,8 @@ THREE.InputNode = function ( type, params ) {
|
|
|
|
|
|
THREE.TempNode.call( this, type, params );
|
|
|
|
|
|
+ this.readonly = false;
|
|
|
+
|
|
|
};
|
|
|
|
|
|
THREE.InputNode.prototype = Object.create( THREE.TempNode.prototype );
|
|
@@ -21,27 +23,36 @@ THREE.InputNode.prototype.generate = function ( builder, output, uuid, type, ns,
|
|
|
uuid = builder.getUuid( uuid || this.getUuid() );
|
|
|
type = type || this.getType( builder );
|
|
|
|
|
|
- var data = material.getDataNode( uuid );
|
|
|
+ var data = material.getDataNode( uuid ),
|
|
|
+ readonly = this.readonly && this.generateReadonly !== undefined;
|
|
|
|
|
|
- if ( builder.isShader( 'vertex' ) ) {
|
|
|
+ if ( readonly ) {
|
|
|
|
|
|
- if ( ! data.vertex ) {
|
|
|
+ return this.generateReadonly( builder, output, uuid, type, ns, needsUpdate );
|
|
|
|
|
|
- data.vertex = material.createVertexUniform( type, this.value, ns, needsUpdate );
|
|
|
+ } else {
|
|
|
|
|
|
- }
|
|
|
+ if ( builder.isShader( 'vertex' ) ) {
|
|
|
|
|
|
- return builder.format( data.vertex.name, type, output );
|
|
|
+ if ( ! data.vertex ) {
|
|
|
|
|
|
- } else {
|
|
|
+ data.vertex = material.createVertexUniform( type, this.value, ns, needsUpdate );
|
|
|
|
|
|
- if ( ! data.fragment ) {
|
|
|
+ }
|
|
|
|
|
|
- data.fragment = material.createFragmentUniform( type, this.value, ns, needsUpdate );
|
|
|
+ return builder.format( data.vertex.name, type, output );
|
|
|
|
|
|
- }
|
|
|
+ } else {
|
|
|
|
|
|
- return builder.format( data.fragment.name, type, output );
|
|
|
+ if ( ! data.fragment ) {
|
|
|
+
|
|
|
+ data.fragment = material.createFragmentUniform( type, this.value, ns, needsUpdate );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return builder.format( data.fragment.name, type, output );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|