From 4a1cc6445b8beaa72b8847f6f750125189efbc8f Mon Sep 17 00:00:00 2001 From: Ib Green Date: Thu, 25 Apr 2024 09:01:26 -0400 Subject: [PATCH] Revert "shadertools: Resolve dependencies in ShaderInputs (#2073)" This reverts commit 11efb2927c66428e0203c1b75c6d5ba87ec37397. --- modules/engine/src/shader-inputs.ts | 23 +++++------- modules/engine/test/shader-inputs.spec.ts | 31 ---------------- .../lib/shader-assembly/resolve-modules.ts | 37 +++++-------------- 3 files changed, 18 insertions(+), 73 deletions(-) diff --git a/modules/engine/src/shader-inputs.ts b/modules/engine/src/shader-inputs.ts index c8723e8c0d..6d832e3d95 100644 --- a/modules/engine/src/shader-inputs.ts +++ b/modules/engine/src/shader-inputs.ts @@ -61,22 +61,17 @@ export class ShaderInputs< * @param modules */ // @ts-expect-error Fix typings - constructor(modules: {[P in keyof ShaderPropsT]?: ShaderModuleInputs}) { - // Extract modules with dependencies - const resolvedModules = _resolveModules( - Object.values(modules).filter(module => module.dependencies), - false - ); - for (const resolvedModule of resolvedModules) { - // @ts-expect-error Fix typings - modules[resolvedModule.name] = resolvedModule; - } - - log.log(1, 'Creating ShaderInputs with modules', Object.keys(modules))(); + constructor(modules: {[P in keyof ShaderPropsT]: ShaderModuleInputs}) { + // TODO - get all dependencies from modules + const allModules = _resolveModules(Object.values(modules)); + log.log( + 1, + 'Creating ShaderInputs with modules', + allModules.map(m => m.name) + )(); // Store the module definitions and create storage for uniform values and binding values, per module - // @ts-expect-error Fix typings - this.modules = modules as {[P in keyof ShaderPropsT]: ShaderModuleInputs}; + this.modules = modules; this.moduleUniforms = {} as Record>; this.moduleBindings = {} as Record>; diff --git a/modules/engine/test/shader-inputs.spec.ts b/modules/engine/test/shader-inputs.spec.ts index edc058e26d..58f9e85bc2 100644 --- a/modules/engine/test/shader-inputs.spec.ts +++ b/modules/engine/test/shader-inputs.spec.ts @@ -6,7 +6,6 @@ import test from 'tape-promise/tape'; import {picking} from '../../shadertools/src/index'; // import {_ShaderInputs as ShaderInputs} from '@luma.gl/engine'; import {ShaderInputs} from '../src/shader-inputs'; -import {ShaderModule} from '@luma.gl/shadertools'; test('ShaderInputs#picking', t => { const shaderInputsUntyped = new ShaderInputs({picking}); @@ -63,33 +62,3 @@ test('ShaderInputs#picking prop merge', t => { t.end(); }); - -test('ShaderInputs#dependencies', t => { - type CustomProps = {color: number[]}; - const custom: ShaderModule = { - name: 'custom', - dependencies: [picking], - uniformTypes: { - color: 'vec3' - } - }; - - const shaderInputs = new ShaderInputs<{ - custom: CustomProps; - picking: typeof picking.props; - }>({custom}); - t.deepEqual(Object.keys(shaderInputs.modules), ['custom', 'picking']); - - shaderInputs.setProps({ - custom: {color: [255, 0, 0]}, - picking: {highlightedObjectColor: [1, 2, 3]} - }); - t.deepEqual(shaderInputs.moduleUniforms.custom.color, [255, 0, 0], 'custom color updated'); - t.deepEqual( - shaderInputs.moduleUniforms.picking.highlightedObjectColor, - [1, 2, 3], - 'highlight object color updated' - ); - - t.end(); -}); diff --git a/modules/shadertools/src/lib/shader-assembly/resolve-modules.ts b/modules/shadertools/src/lib/shader-assembly/resolve-modules.ts index a536a6a732..1c33261aeb 100644 --- a/modules/shadertools/src/lib/shader-assembly/resolve-modules.ts +++ b/modules/shadertools/src/lib/shader-assembly/resolve-modules.ts @@ -6,34 +6,15 @@ import type {ShaderModule} from '../shader-module/shader-module'; import {ShaderModuleInstance} from '../shader-module/shader-module-instance'; /** - * Resolve any dependencies and optionally instantiate modules + * Instantiate shader modules and esolve any dependencies */ export function resolveModules( modules: (ShaderModule | ShaderModuleInstance)[] -): ShaderModuleInstance[]; -export function resolveModules( - modules: (ShaderModule | ShaderModuleInstance)[], - instantiate: true -): ShaderModuleInstance[]; -export function resolveModules(modules: ShaderModule[], instantiate: false): ShaderModule[]; -export function resolveModules( - modules: ShaderModuleInstance[], - instantiate: false -): ShaderModuleInstance[]; -export function resolveModules( - modules: (ShaderModule | ShaderModuleInstance)[], - instantiate: boolean = true -): (ShaderModule | ShaderModuleInstance)[] { - return getShaderDependencies( - instantiate === false ? modules : ShaderModuleInstance.instantiateModules(modules) - ); +): ShaderModuleInstance[] { + const instances = ShaderModuleInstance.instantiateModules(modules); + return getShaderDependencies(instances); } -type AbstractModule = { - name: string; - dependencies?: AbstractModule[]; -}; - /** * Takes a list of shader module names and returns a new list of * shader module names that includes all dependencies, sorted so @@ -46,8 +27,8 @@ type AbstractModule = { * @param modules - Array of modules (inline modules or module names) * @return - Array of modules */ -function getShaderDependencies(modules: T[]): T[] { - const moduleMap: Record = {}; +function getShaderDependencies(modules: ShaderModuleInstance[]): ShaderModuleInstance[] { + const moduleMap: Record = {}; const moduleDepth: Record = {}; getDependencyGraph({modules, level: 0, moduleMap, moduleDepth}); @@ -67,10 +48,10 @@ function getShaderDependencies(modules: T[]): T[] { * @return - Map of module name to its level */ // Adds another level of dependencies to the result map -export function getDependencyGraph(options: { - modules: T[]; +export function getDependencyGraph(options: { + modules: ShaderModuleInstance[]; level: number; - moduleMap: Record; + moduleMap: Record; moduleDepth: Record; }) { const {modules, level, moduleMap, moduleDepth} = options;