@lightningjs/renderer
Version:
Lightning 3 Renderer
58 lines • 2.36 kB
JavaScript
export class DynamicShaderController {
shader;
resolvedProps;
props;
type;
constructor(shader, props, shManager) {
this.shader = shader;
this.type = 'DynamicShader';
this.resolvedProps = props;
const effectConstructors = shManager.getRegisteredEffects();
const definedProps = {};
const effects = props.effects;
const effectsLength = effects.length;
for (let i = 0; i < effectsLength; i++) {
const { name: effectName, props: effectProps, type: effectType, } = effects[i];
if (effectName === undefined) {
continue;
}
const definedEffectProps = {};
const propEntries = Object.keys(effectProps);
const propEntriesLength = propEntries.length;
for (let j = 0; j < propEntriesLength; j++) {
const propName = propEntries[j];
Object.defineProperty(definedEffectProps, propName, {
get: () => {
return this.resolvedProps.effects[i].props[propName].value;
},
set: (value) => {
const target = this.resolvedProps.effects[i].props[propName];
target.value = value;
if (target.hasValidator) {
value = target.validatedValue = effectConstructors[effectType]
.uniforms[propName]?.validator(value, effectProps);
}
if (target.hasProgramValueUpdater) {
effectConstructors[effectType].uniforms[propName]
?.updateProgramValue(target);
}
else {
target.programValue = value;
}
shManager.renderer.stage.requestRender();
},
});
}
Object.defineProperty(definedProps, effectName, {
get: () => {
return definedEffectProps;
},
});
}
this.props = definedProps;
}
getResolvedProps() {
return this.resolvedProps;
}
}
//# sourceMappingURL=DynamicShaderController.js.map