浏览代码

Add ivec, uvec, bvec, imat, umat, and bmat (#23646)

* Add ivec, uvec, bvec, imat, umat, and bmat

* Fix

* Change the way how it is done

* Fix

* Another fix

* Fix bvec
LeviPesin 3 年之前
父节点
当前提交
96e74932f2

+ 22 - 2
examples/jsm/nodes/ShaderNode.js

@@ -220,7 +220,7 @@ export const label = ( node, name ) => {
 
 
 export const temp = ( node ) => nodeObject( new VarNode( nodeObject( node ) ) );
 export const temp = ( node ) => nodeObject( new VarNode( nodeObject( node ) ) );
 
 
-const ConvertType = function ( nodeClass, type, valueClass = null, valueComponents = 1 ) {
+const ConvertType = function ( nodeClass, type, valueClass = null, valueComponents = 1, convertAfter = false ) {
 
 
 	return ( ...params ) => {
 	return ( ...params ) => {
 
 
@@ -244,7 +244,9 @@ const ConvertType = function ( nodeClass, type, valueClass = null, valueComponen
 
 
 		const val = ( ( valueClass === null ) || ( params[ 0 ] instanceof valueClass ) ) ? params[ 0 ] : new valueClass().set( ...params );
 		const val = ( ( valueClass === null ) || ( params[ 0 ] instanceof valueClass ) ) ? params[ 0 ] : new valueClass().set( ...params );
 
 
-		return nodeObject( new nodeClass( val ).setConst( true ) );
+		const node = nodeObject( new nodeClass( val ).setConst( true ) );
+
+		return convertAfter === true ? nodeObject( new ConvertNode( node, type ) ) : node;
 
 
 	};
 	};
 
 
@@ -257,11 +259,29 @@ export const bool = new ConvertType( BoolNode, 'bool' );
 export const color = new ConvertType( ColorNode, 'color', Color );
 export const color = new ConvertType( ColorNode, 'color', Color );
 
 
 export const vec2 = new ConvertType( Vector2Node, 'vec2', Vector2, 2 );
 export const vec2 = new ConvertType( Vector2Node, 'vec2', Vector2, 2 );
+export const ivec2 = new ConvertType( Vector2Node, 'ivec2', Vector2, 2, true );
+export const uvec2 = new ConvertType( Vector2Node, 'uvec2', Vector2, 2, true );
+export const bvec2 = new ConvertType( Vector2Node, 'bvec2', Vector2, 2, true );
+
 export const vec3 = new ConvertType( Vector3Node, 'vec3', Vector3, 3 );
 export const vec3 = new ConvertType( Vector3Node, 'vec3', Vector3, 3 );
+export const ivec3 = new ConvertType( Vector3Node, 'ivec3', Vector3, 3, true );
+export const uvec3 = new ConvertType( Vector3Node, 'uvec3', Vector3, 3, true );
+export const bvec3 = new ConvertType( Vector3Node, 'bvec3', Vector3, 3, true );
+
 export const vec4 = new ConvertType( Vector4Node, 'vec4', Vector4, 4 );
 export const vec4 = new ConvertType( Vector4Node, 'vec4', Vector4, 4 );
+export const ivec4 = new ConvertType( Vector4Node, 'ivec4', Vector4, 4, true );
+export const uvec4 = new ConvertType( Vector4Node, 'uvec4', Vector4, 4, true );
+export const bvec4 = new ConvertType( Vector4Node, 'bvec4', Vector4, 4, true );
 
 
 export const mat3 = new ConvertType( Matrix3Node, 'mat3', Matrix3 );
 export const mat3 = new ConvertType( Matrix3Node, 'mat3', Matrix3 );
+export const imat3 = new ConvertType( Matrix3Node, 'imat3', Matrix3, 1, true );
+export const umat3 = new ConvertType( Matrix3Node, 'umat3', Matrix3, 1, true );
+export const bmat3 = new ConvertType( Matrix3Node, 'bmat3', Matrix3, 1, true );
+
 export const mat4 = new ConvertType( Matrix4Node, 'mat4', Matrix4 );
 export const mat4 = new ConvertType( Matrix4Node, 'mat4', Matrix4 );
+export const imat4 = new ConvertType( Matrix4Node, 'imat4', Matrix4, 1, true );
+export const umat4 = new ConvertType( Matrix4Node, 'umat4', Matrix4, 1, true );
+export const bmat4 = new ConvertType( Matrix4Node, 'bmat4', Matrix4, 1, true );
 
 
 export const join = ( ...params ) => {
 export const join = ( ...params ) => {
 
 

+ 3 - 1
examples/jsm/nodes/core/NodeBuilder.js

@@ -12,6 +12,8 @@ export const shaderStages = [ 'fragment', 'vertex' ];
 export const vector = [ 'x', 'y', 'z', 'w' ];
 export const vector = [ 'x', 'y', 'z', 'w' ];
 
 
 const toFloat = ( value ) => {
 const toFloat = ( value ) => {
+	
+	value = Number( value );
 
 
 	return value + ( value % 1 ? '' : '.0' );
 	return value + ( value % 1 ? '' : '.0' );
 
 
@@ -286,7 +288,7 @@ class NodeBuilder {
 
 
 	getVectorFromMatrix( type ) {
 	getVectorFromMatrix( type ) {
 
 
-		return 'vec' + type.slice( 3 );
+		return type.replace( 'mat', 'vec' );
 
 
 	}
 	}
 
 

+ 20 - 2
examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js

@@ -33,13 +33,31 @@ const wgslTypeLib = {
 	int: 'i32',
 	int: 'i32',
 	uint: 'u32',
 	uint: 'u32',
 	bool: 'bool',
 	bool: 'bool',
+	
 	vec2: 'vec2<f32>',
 	vec2: 'vec2<f32>',
+	ivec2: 'vec2<i32>',
+	uvec2: 'vec2<u32>',
+	bvec2: 'vec2<bool>',
+	
 	vec3: 'vec3<f32>',
 	vec3: 'vec3<f32>',
+	ivec3: 'vec3<i32>',
+	uvec3: 'vec3<u32>',
+	bvec3: 'vec3<bool>',
+	
 	vec4: 'vec4<f32>',
 	vec4: 'vec4<f32>',
+	ivec4: 'vec4<i32>',
 	uvec4: 'vec4<u32>',
 	uvec4: 'vec4<u32>',
-	bvec3: 'vec3<bool>',
+	bvec4: 'vec4<bool>',
+	
 	mat3: 'mat3x3<f32>',
 	mat3: 'mat3x3<f32>',
-	mat4: 'mat4x4<f32>'
+	imat3: 'mat3x3<i32>',
+	umat3: 'mat3x3<u32>',
+	bmat3: 'mat3x3<bool>',
+	
+	mat4: 'mat4x4<f32>',
+	imat4: 'mat4x4<i32>',
+	umat4: 'mat4x4<u32>',
+	bmat4: 'mat4x4<bool>'
 };
 };
 
 
 const wgslMethods = {
 const wgslMethods = {