|
@@ -13,7 +13,6 @@ export const shaderStages = [ ...defaultShaderStages, 'compute' ];
|
|
|
export const vector = [ 'x', 'y', 'z', 'w' ];
|
|
|
|
|
|
const typeFromLength = new Map();
|
|
|
-typeFromLength.set( 1, 'float' );
|
|
|
typeFromLength.set( 2, 'vec2' );
|
|
|
typeFromLength.set( 3, 'vec3' );
|
|
|
typeFromLength.set( 4, 'vec4' );
|
|
@@ -365,6 +364,8 @@ class NodeBuilder {
|
|
|
|
|
|
type = this.getVectorType( type );
|
|
|
|
|
|
+ if ( type === 'float' || type === 'bool' || type === 'int' || type === 'uint' ) return type;
|
|
|
+
|
|
|
const componentType = /(b|i|u|)(vec|mat)([2-4])/.exec( type );
|
|
|
|
|
|
if ( componentType === null ) return null;
|
|
@@ -386,9 +387,12 @@ class NodeBuilder {
|
|
|
|
|
|
}
|
|
|
|
|
|
- getTypeFromLength( length ) {
|
|
|
+ getTypeFromLength( length, componentType = 'float' ) {
|
|
|
|
|
|
- return typeFromLength.get( length );
|
|
|
+ if ( length === 1 ) return componentType;
|
|
|
+ const baseType = typeFromLength.get( length );
|
|
|
+ const prefix = componentType === 'float' ? '' : componentType[ 0 ];
|
|
|
+ return prefix + baseType;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -412,6 +416,22 @@ class NodeBuilder {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ changeComponentType( type, newComponentType ) {
|
|
|
+
|
|
|
+ return this.getTypeFromLength( this.getTypeLength( type ), newComponentType );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ getIntegerType( type ) {
|
|
|
+
|
|
|
+ const componentType = this.getComponentType( type );
|
|
|
+
|
|
|
+ if ( componentType === 'int' || componentType === 'uint' ) return type;
|
|
|
+
|
|
|
+ return this.changeComponentType( type, 'int' );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
getDataFromNode( node, shaderStage = this.shaderStage ) {
|
|
|
|
|
|
let nodeData = this.nodesData.get( node );
|