three-instanced-uniforms-mesh
Advanced tools
Comparing version 0.49.0 to 0.49.1
@@ -6,2 +6,13 @@ # Change Log | ||
## [0.49.1](https://github.com/protectwise/troika/compare/v0.49.0...v0.49.1) (2024-04-09) | ||
### Bug Fixes | ||
* **instanced-uniforms-mesh:** remove listener on dispose ([#284](https://github.com/protectwise/troika/issues/284)) ([336075d](https://github.com/protectwise/troika/commit/336075de027e21ed1a9286c34185c9a0568053fe)) | ||
# [0.49.0](https://github.com/protectwise/troika/compare/v0.48.1...v0.49.0) (2023-10-08) | ||
@@ -8,0 +19,0 @@ |
@@ -103,2 +103,3 @@ import { InstancedMesh, MeshBasicMaterial, InstancedBufferAttribute } from 'three'; | ||
baseGeom.addEventListener('dispose', function onDispose () { | ||
baseGeom.removeEventListener('dispose', onDispose); | ||
derivedGeom.dispose(); | ||
@@ -105,0 +106,0 @@ }); |
@@ -106,2 +106,3 @@ (function (global, factory) { | ||
baseGeom.addEventListener('dispose', function onDispose () { | ||
baseGeom.removeEventListener('dispose', onDispose); | ||
derivedGeom.dispose(); | ||
@@ -108,0 +109,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._maxCount=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*e):a.set(d,b*e)}class r extends h.InstancedMesh{constructor(a,b,d){super(a,b,d);this._maxCount=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 e(){b.removeEventListener("dispose",e);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._maxCount),c);if(null!==g)for(e=0;e<this._maxCount;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.49.0", | ||
"version": "0.49.1", | ||
"description": "Extension to Three.js InstancedMesh supporting per-instance uniform values", | ||
@@ -22,3 +22,3 @@ "author": "Jason Johnston <jason.johnston@protectwise.com>", | ||
}, | ||
"gitHead": "c51cb70f0fbae38f2d4c19fd6869e74da0d49c33" | ||
"gitHead": "d23f360c4316fa782d351151062ea3b0c2629ca1" | ||
} |
@@ -26,2 +26,3 @@ import { InstancedBufferAttribute, InstancedMesh, MeshBasicMaterial } from 'three' | ||
baseGeom.addEventListener('dispose', function onDispose () { | ||
baseGeom.removeEventListener('dispose', onDispose) | ||
derivedGeom.dispose() | ||
@@ -28,0 +29,0 @@ }) |
41479
683