Shader assets: graph-built shaders, the Shader tab and sprite rows from the graph (#62)
game-maker / suite (push) Failing after 3m59s

A shader is an asset carrying a node graph (Texture color, Output, Property,
Color, Add/Subtract/Multiply/Divide, Mix, Luminance) that compiles to the GLSL
fragment of a Pixi filter. The Shader tab reuses the Behavior canvas; a sprite
wears a shader through its Shader picker, and the rows below it are the
graph's Property nodes. Property schema, resolution and deviation take the
project because a sprite's rows now live in another asset. The built-in
registry of the prototype is gone; "Adjust colors" ships as a graph in the
fixture and the three example games.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
rootandClaude Fable 5.1 committed 2026-09-12 22:41:14 +02:00
1 parent 6141d07d4f
commit 42cafa7543
62 files changed
+1682 -144

No files matched your search

+10 -3
View File
@@ -13,7 +13,7 @@ import {
type Project,
} from '../model/Project';
import type { SceneObject } from '../model/SceneObject';
import { propDef, type PropertyDef } from '../properties/PropertySchema';
import { type PropertyDef, schemaForAsset, schemaForObject } from '../properties/PropertySchema';
import { CommandError } from './Command';
export function requireAsset(project: Project, assetId: string): Asset {
@@ -91,8 +91,15 @@ export function requireNodeDef(type: string): NodeDef {
return def;
}
export function requirePropDef(asset: Asset, key: string): PropertyDef {
const def = propDef(asset, key);
/** The row `key` names on the asset – or, given the placed object, on that object (its shader's rows). */
export function requirePropDef(
project: Project,
asset: Asset,
key: string,
object?: SceneObject,
): PropertyDef {
const schema = object ? schemaForObject(project, asset, object) : schemaForAsset(project, asset);
const def = schema.find((d) => d.key === key);
if (!def) throw new CommandError(`Property "${key}" is not defined for ${asset.type}`);
return def;
}