New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

three-instanced-uniforms-mesh

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

three-instanced-uniforms-mesh - npm Package Compare versions

Comparing version 0.45.0 to 0.46.0

8

CHANGELOG.md

@@ -6,2 +6,10 @@ # Change Log

# [0.46.0](https://github.com/protectwise/troika/compare/v0.45.0...v0.46.0) (2022-03-05)
**Note:** Version bump only for package three-instanced-uniforms-mesh
# [0.45.0](https://github.com/protectwise/troika/compare/v0.44.0...v0.45.0) (2022-01-02)

@@ -8,0 +16,0 @@

33

dist/three-instanced-uniforms-mesh.esm.js
import { InstancedMesh, MeshBasicMaterial, InstancedBufferAttribute } from 'three';
import { createDerivedMaterial, getShaderUniformTypes, voidMainRegExp, getShadersForMaterial } from 'troika-three-utils';
const precededByUniformRE = /\buniform\s+(int|float|vec[234])\s+$/;
const attrRefReplacer = (name, index, str) => (precededByUniformRE.test(str.substr(0, index)) ? name : `troika_attr_${name}`);
const varyingRefReplacer = (name, index, str) => (precededByUniformRE.test(str.substr(0, index)) ? name : `troika_vary_${name}`);
function createInstancedUniformsDerivedMaterial (baseMaterial) {

@@ -28,14 +24,20 @@ let _uniformNames = [];

let fragType = fragmentUniforms[name];
if (vertType || fragType) {
let finder = new RegExp(`\\b${name}\\b`, 'g');
vertexDeclarations.push(`attribute ${vertType || fragType} troika_attr_${name};`);
const type = vertType || fragType;
if (type) {
const declarationFinder = new RegExp(`\\buniform\\s+${type}\\s+${name}\\s*;`, 'g');
const referenceFinder = new RegExp(`\\b${name}\\b`, 'g');
const attrName = `troika_attr_${name}`;
const varyingName = `troika_vary_${name}`;
vertexDeclarations.push(`attribute ${type} ${attrName};`);
if (vertType) {
vertexShader = vertexShader.replace(finder, attrRefReplacer);
vertexShader = vertexShader.replace(declarationFinder, '');
vertexShader = vertexShader.replace(referenceFinder, attrName);
}
if (fragType) {
fragmentShader = fragmentShader.replace(finder, varyingRefReplacer);
let varyingDecl = `varying ${fragType} troika_vary_${name};`;
fragmentShader = fragmentShader.replace(declarationFinder, '');
fragmentShader = fragmentShader.replace(referenceFinder, varyingName);
let varyingDecl = `varying ${fragType} ${varyingName};`;
vertexDeclarations.push(varyingDecl);
fragmentDeclarations.push(varyingDecl);
vertexAssignments.push(`troika_vary_${name} = troika_attr_${name};`);
vertexAssignments.push(`${varyingName} = ${attrName};`);
}

@@ -154,3 +156,3 @@ }

* @param {number} index - the index of the instance to set the value for
* @param {number|Vector2|Vector3|Vector4|Color|Array} value - the uniform value for this instance
* @param {number|Vector2|Vector3|Vector4|Color|Array|Matrix3|Matrix4|Quaternion} value - the uniform value for this instance
*/

@@ -202,2 +204,6 @@ setUniformAt (name, index, value) {

attr.setXYZW(index, value.x, value.y, value.z, value.w);
} else if (value.toArray) {
value.toArray(attr.array, index * size);
} else {
attr.set(value, index * size);
}

@@ -224,3 +230,4 @@ }

: value.isVector3 || value.isColor ? 3
: value.isVector4 ? 4
: value.isVector4 || value.isQuaternion ? 4
: value.elements ? value.elements.length
: Array.isArray(value) ? value.length

@@ -227,0 +234,0 @@ : 0

@@ -7,6 +7,2 @@ (function (global, factory) {

const precededByUniformRE = /\buniform\s+(int|float|vec[234])\s+$/;
const attrRefReplacer = (name, index, str) => (precededByUniformRE.test(str.substr(0, index)) ? name : `troika_attr_${name}`);
const varyingRefReplacer = (name, index, str) => (precededByUniformRE.test(str.substr(0, index)) ? name : `troika_vary_${name}`);
function createInstancedUniformsDerivedMaterial (baseMaterial) {

@@ -32,14 +28,20 @@ let _uniformNames = [];

let fragType = fragmentUniforms[name];
if (vertType || fragType) {
let finder = new RegExp(`\\b${name}\\b`, 'g');
vertexDeclarations.push(`attribute ${vertType || fragType} troika_attr_${name};`);
const type = vertType || fragType;
if (type) {
const declarationFinder = new RegExp(`\\buniform\\s+${type}\\s+${name}\\s*;`, 'g');
const referenceFinder = new RegExp(`\\b${name}\\b`, 'g');
const attrName = `troika_attr_${name}`;
const varyingName = `troika_vary_${name}`;
vertexDeclarations.push(`attribute ${type} ${attrName};`);
if (vertType) {
vertexShader = vertexShader.replace(finder, attrRefReplacer);
vertexShader = vertexShader.replace(declarationFinder, '');
vertexShader = vertexShader.replace(referenceFinder, attrName);
}
if (fragType) {
fragmentShader = fragmentShader.replace(finder, varyingRefReplacer);
let varyingDecl = `varying ${fragType} troika_vary_${name};`;
fragmentShader = fragmentShader.replace(declarationFinder, '');
fragmentShader = fragmentShader.replace(referenceFinder, varyingName);
let varyingDecl = `varying ${fragType} ${varyingName};`;
vertexDeclarations.push(varyingDecl);
fragmentDeclarations.push(varyingDecl);
vertexAssignments.push(`troika_vary_${name} = troika_attr_${name};`);
vertexAssignments.push(`${varyingName} = ${attrName};`);
}

@@ -158,3 +160,3 @@ }

* @param {number} index - the index of the instance to set the value for
* @param {number|Vector2|Vector3|Vector4|Color|Array} value - the uniform value for this instance
* @param {number|Vector2|Vector3|Vector4|Color|Array|Matrix3|Matrix4|Quaternion} value - the uniform value for this instance
*/

@@ -206,2 +208,6 @@ setUniformAt (name, index, value) {

attr.setXYZW(index, value.x, value.y, value.z, value.w);
} else if (value.toArray) {
value.toArray(attr.array, index * size);
} else {
attr.set(value, index * size);
}

@@ -228,3 +234,4 @@ }

: value.isVector3 || value.isColor ? 3
: value.isVector4 ? 4
: value.isVector4 || value.isQuaternion ? 4
: value.elements ? value.elements.length
: Array.isArray(value) ? value.length

@@ -231,0 +238,0 @@ : 0

@@ -1,7 +0,7 @@

'use strict';(function(f,h){"object"===typeof exports&&"undefined"!==typeof module?h(exports,require("three"),require("troika-three-utils")):"function"===typeof define&&define.amd?define(["exports","three","troika-three-utils"],h):(f="undefined"!==typeof globalThis?globalThis:f||self,h(f.three_instanced_uniforms_mesh={},f.THREE,f.troika_three_utils))})(this,function(f,h,k){function l(a){let b=[],c="";a=k.createDerivedMaterial(a,{chained:!0,customRewriter({vertexShader:a,fragmentShader:d}){let c=[],
e=[],f=[],h=k.getShaderUniformTypes(a),p=k.getShaderUniformTypes(d);b.forEach(b=>{var g=h[b];let k=p[b];if(g||k){let h=new RegExp(`\\b${b}\\b`,"g");c.push(`attribute ${g||k} troika_attr_${b};`);g&&(a=a.replace(h,q));k&&(d=d.replace(h,r),g=`varying ${k} troika_vary_${b};`,c.push(g),f.push(g),e.push(`troika_vary_${b} = troika_attr_${b};`))}});a=`${c.join("\n")}\n${a.replace(k.voidMainRegExp,`\n$&\n${e.join("\n")}`)}`;f.length&&(d=`${f.join("\n")}\n${d}`);return{vertexShader:a,fragmentShader:d}}});a.setUniformNames=
function(a){b=a||[];a=b.sort().join("|");a!==c&&(c=a,this.needsUpdate=!0)};let e=a.customProgramCacheKey();a.customProgramCacheKey=function(){return e+"|"+c};a.isInstancedUniformsMaterial=!0;return a}function m(a,b,c){let e=a.itemSize;1===e?a.setX(b,c):2===e?a.setXY(b,c.x,c.y):3===e?c.isColor?a.setXYZ(b,c.r,c.g,c.b):a.setXYZ(b,c.x,c.y,c.z):4===e&&a.setXYZW(b,c.x,c.y,c.z,c.w)}let n=/\buniform\s+(int|float|vec[234])\s+$/,q=(a,b,c)=>n.test(c.substr(0,b))?a:`troika_attr_${a}`,r=(a,b,c)=>n.test(c.substr(0,
b))?a:`troika_vary_${a}`;class t extends h.InstancedMesh{constructor(a,b,c){super(a,b,c);this._instancedUniformNames=[]}get geometry(){let a=this._derivedGeometry,b=this._baseGeometry;a&&a.baseGeometry===b||(a=this._derivedGeometry=Object.create(b),a.baseGeometry=b,a.attributes=Object.create(b.attributes),b.addEventListener("dispose",function(){a.dispose()}));return a}set geometry(a){this._baseGeometry=a}get material(){let a=this._derivedMaterial,b=this._baseMaterial||this._defaultMaterial||(this._defaultMaterial=
new h.MeshBasicMaterial);a&&a.baseMaterial===b||(a=this._derivedMaterial=l(b),b.addEventListener("dispose",function e(){b.removeEventListener("dispose",e);a.dispose()}));a.setUniformNames(this._instancedUniformNames);return a}set material(a){if(Array.isArray(a))throw Error("InstancedUniformsMesh does not support multiple materials");for(;a&&a.isInstancedUniformsMaterial;)a=a.baseMaterial;this._baseMaterial=a}get customDepthMaterial(){return this.material.getDepthMaterial()}get customDistanceMaterial(){return this.material.getDistanceMaterial()}setUniformAt(a,
b,c){var e=this.geometry.attributes;let f=`troika_attr_${a}`;var d=e[f];if(!d){var g=this._baseMaterial;g=(d=g.uniforms)&&d[a]?d[a].value:(d=k.getShadersForMaterial(g).uniforms)&&d[a]?d[a].value:null;d=g;d=null==d?0:"number"===typeof d?1:d.isVector2?2:d.isVector3||d.isColor?3:d.isVector4?4:Array.isArray(d)?d.length:0;d=e[f]=new h.InstancedBufferAttribute(new Float32Array(d*this.count),d);if(null!==g)for(e=0;e<this.count;e++)m(d,e,g);this._instancedUniformNames=[...this._instancedUniformNames,a]}m(d,
b,c);d.needsUpdate=!0}unsetUniform(a){this.geometry.deleteAttribute(`troika_attr_${a}`);this._instancedUniformNames=this._instancedUniformNames.filter(b=>b!==a)}}f.InstancedUniformsMesh=t;f.createInstancedUniformsDerivedMaterial=l;Object.defineProperty(f,"__esModule",{value:!0})})
'use strict';(function(f,h){"object"===typeof exports&&"undefined"!==typeof module?h(exports,require("three"),require("troika-three-utils")):"function"===typeof define&&define.amd?define(["exports","three","troika-three-utils"],h):(f="undefined"!==typeof globalThis?globalThis:f||self,h(f.three_instanced_uniforms_mesh={},f.THREE,f.troika_three_utils))})(this,function(f,h,k){function p(a){let b=[],d="";a=k.createDerivedMaterial(a,{chained:!0,customRewriter({vertexShader:a,fragmentShader:c}){let d=[],
e=[],f=[],h=k.getShaderUniformTypes(a),l=k.getShaderUniformTypes(c);b.forEach(b=>{var g=h[b];let k=l[b];const m=g||k;if(m){const h=new RegExp(`\\buniform\\s+${m}\\s+${b}\\s*;`,"g"),l=new RegExp(`\\b${b}\\b`,"g"),n=`troika_attr_${b}`;b=`troika_vary_${b}`;d.push(`attribute ${m} ${n};`);g&&(a=a.replace(h,""),a=a.replace(l,n));k&&(c=c.replace(h,""),c=c.replace(l,b),g=`varying ${k} ${b};`,d.push(g),f.push(g),e.push(`${b} = ${n};`))}});a=`${d.join("\n")}\n${a.replace(k.voidMainRegExp,`\n$&\n${e.join("\n")}`)}`;
f.length&&(c=`${f.join("\n")}\n${c}`);return{vertexShader:a,fragmentShader:c}}});a.setUniformNames=function(a){b=a||[];a=b.sort().join("|");a!==d&&(d=a,this.needsUpdate=!0)};let e=a.customProgramCacheKey();a.customProgramCacheKey=function(){return e+"|"+d};a.isInstancedUniformsMaterial=!0;return a}function q(a,b,d){let e=a.itemSize;1===e?a.setX(b,d):2===e?a.setXY(b,d.x,d.y):3===e?d.isColor?a.setXYZ(b,d.r,d.g,d.b):a.setXYZ(b,d.x,d.y,d.z):4===e?a.setXYZW(b,d.x,d.y,d.z,d.w):d.toArray?d.toArray(a.array,
b*e):a.set(d,b*e)}class r extends h.InstancedMesh{constructor(a,b,d){super(a,b,d);this._instancedUniformNames=[]}get geometry(){let a=this._derivedGeometry,b=this._baseGeometry;a&&a.baseGeometry===b||(a=this._derivedGeometry=Object.create(b),a.baseGeometry=b,a.attributes=Object.create(b.attributes),b.addEventListener("dispose",function(){a.dispose()}));return a}set geometry(a){this._baseGeometry=a}get material(){let a=this._derivedMaterial,b=this._baseMaterial||this._defaultMaterial||(this._defaultMaterial=
new h.MeshBasicMaterial);a&&a.baseMaterial===b||(a=this._derivedMaterial=p(b),b.addEventListener("dispose",function e(){b.removeEventListener("dispose",e);a.dispose()}));a.setUniformNames(this._instancedUniformNames);return a}set material(a){if(Array.isArray(a))throw Error("InstancedUniformsMesh does not support multiple materials");for(;a&&a.isInstancedUniformsMaterial;)a=a.baseMaterial;this._baseMaterial=a}get customDepthMaterial(){return this.material.getDepthMaterial()}get customDistanceMaterial(){return this.material.getDistanceMaterial()}setUniformAt(a,
b,d){var e=this.geometry.attributes;let f=`troika_attr_${a}`;var c=e[f];if(!c){var g=this._baseMaterial;g=(c=g.uniforms)&&c[a]?c[a].value:(c=k.getShadersForMaterial(g).uniforms)&&c[a]?c[a].value:null;c=g;c=null==c?0:"number"===typeof c?1:c.isVector2?2:c.isVector3||c.isColor?3:c.isVector4||c.isQuaternion?4:c.elements?c.elements.length:Array.isArray(c)?c.length:0;c=e[f]=new h.InstancedBufferAttribute(new Float32Array(c*this.count),c);if(null!==g)for(e=0;e<this.count;e++)q(c,e,g);this._instancedUniformNames=
[...this._instancedUniformNames,a]}q(c,b,d);c.needsUpdate=!0}unsetUniform(a){this.geometry.deleteAttribute(`troika_attr_${a}`);this._instancedUniformNames=this._instancedUniformNames.filter(b=>b!==a)}}f.InstancedUniformsMesh=r;f.createInstancedUniformsDerivedMaterial=p;Object.defineProperty(f,"__esModule",{value:!0})})
{
"name": "three-instanced-uniforms-mesh",
"version": "0.45.0",
"version": "0.46.0",
"description": "Extension to Three.js InstancedMesh supporting per-instance uniform values",

@@ -17,3 +17,3 @@ "author": "Jason Johnston <jason.johnston@protectwise.com>",

"dependencies": {
"troika-three-utils": "^0.45.0"
"troika-three-utils": "^0.46.0"
},

@@ -23,3 +23,3 @@ "peerDependencies": {

},
"gitHead": "a1ab2b36832518827f444a8654053a4b0d5d95d7"
"gitHead": "35c7e224bd18df91952377d00609da049fd67384"
}

@@ -39,8 +39,10 @@ # InstancedUniformsMesh

| For a uniform of type: | Pass a value of this type: |
| ---------------------- | -------------------------------- |
| float | Number |
| vec2 | `THREE.Vector2` |
| vec3 | `THREE.Vector3` or `THREE.Color` |
| vec4 | `THREE.Vector4` |
| For a uniform of type: | Pass a value of this type: |
|---------------------------|----------------------------------|
| float | Number |
| vec2 | `THREE.Vector2` |
| vec3 | `THREE.Vector3` or `THREE.Color` |
| vec4 | `THREE.Vector4` |
| mat3 (ThreeJS r132+ only) | `THREE.Matrix3` |
| mat4 (ThreeJS r132+ only) | `THREE.Matrix4` |

@@ -47,0 +49,0 @@

import { createDerivedMaterial, getShaderUniformTypes, voidMainRegExp } from 'troika-three-utils'
const precededByUniformRE = /\buniform\s+(int|float|vec[234])\s+$/
const attrRefReplacer = (name, index, str) => (precededByUniformRE.test(str.substr(0, index)) ? name : `troika_attr_${name}`)
const varyingRefReplacer = (name, index, str) => (precededByUniformRE.test(str.substr(0, index)) ? name : `troika_vary_${name}`)
export function createInstancedUniformsDerivedMaterial (baseMaterial) {

@@ -27,14 +23,20 @@ let _uniformNames = []

let fragType = fragmentUniforms[name]
if (vertType || fragType) {
let finder = new RegExp(`\\b${name}\\b`, 'g')
vertexDeclarations.push(`attribute ${vertType || fragType} troika_attr_${name};`)
const type = vertType || fragType
if (type) {
const declarationFinder = new RegExp(`\\buniform\\s+${type}\\s+${name}\\s*;`, 'g')
const referenceFinder = new RegExp(`\\b${name}\\b`, 'g')
const attrName = `troika_attr_${name}`
const varyingName = `troika_vary_${name}`
vertexDeclarations.push(`attribute ${type} ${attrName};`)
if (vertType) {
vertexShader = vertexShader.replace(finder, attrRefReplacer)
vertexShader = vertexShader.replace(declarationFinder, '')
vertexShader = vertexShader.replace(referenceFinder, attrName)
}
if (fragType) {
fragmentShader = fragmentShader.replace(finder, varyingRefReplacer)
let varyingDecl = `varying ${fragType} troika_vary_${name};`
fragmentShader = fragmentShader.replace(declarationFinder, '')
fragmentShader = fragmentShader.replace(referenceFinder, varyingName)
let varyingDecl = `varying ${fragType} ${varyingName};`
vertexDeclarations.push(varyingDecl)
fragmentDeclarations.push(varyingDecl)
vertexAssignments.push(`troika_vary_${name} = troika_attr_${name};`)
vertexAssignments.push(`${varyingName} = ${attrName};`)
}

@@ -41,0 +43,0 @@ }

@@ -78,3 +78,3 @@ import { InstancedBufferAttribute, InstancedMesh, MeshBasicMaterial } from 'three'

* @param {number} index - the index of the instance to set the value for
* @param {number|Vector2|Vector3|Vector4|Color|Array} value - the uniform value for this instance
* @param {number|Vector2|Vector3|Vector4|Color|Array|Matrix3|Matrix4|Quaternion} value - the uniform value for this instance
*/

@@ -126,2 +126,6 @@ setUniformAt (name, index, value) {

attr.setXYZW(index, value.x, value.y, value.z, value.w)
} else if (value.toArray) {
value.toArray(attr.array, index * size)
} else {
attr.set(value, index * size)
}

@@ -148,3 +152,4 @@ }

: value.isVector3 || value.isColor ? 3
: value.isVector4 ? 4
: value.isVector4 || value.isQuaternion ? 4
: value.elements ? value.elements.length
: Array.isArray(value) ? value.length

@@ -151,0 +156,0 @@ : 0

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc