Add FxNode render graph playground

Add persistent render graph loadouts, grouped node authoring, code-appending apply behavior, explicit playground lighting, and resilient worker startup.

Amp-Thread-ID: https://ampcode.com/threads/T-01a033d4-0e44-708e-af0e-6166283416ff
Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
This commit is contained in:
Amp
2026-08-24 17:45:48 +00:00
co-authored by heaust
parent 951449db0b
commit 6153223fd5
27 changed files with 4672 additions and 207 deletions
+27 -15
View File
@@ -69,6 +69,7 @@ declare module "@yawn/handles" {
export interface SceneOptions {
arenaBytes?: number;
clearColor?: ArrayLike<number>;
debug?: boolean;
fps?: number;
hdr?: boolean;
@@ -78,6 +79,7 @@ declare module "@yawn/handles" {
readonly core: YawnCore;
readonly ready: Promise<this>;
readonly hdr: boolean;
readonly clearColor: readonly [number, number, number, number];
array(name: string): SharedRows;
ensureRows(
name: string,
@@ -88,6 +90,9 @@ declare module "@yawn/handles" {
reserve(additional: { nodes?: number; materials?: number }): Promise<void>;
batchWrites<T>(operation: () => T): T;
batchGraphUpdates<T>(operation: () => T | Promise<T>): Promise<T>;
compileRenderGraph(serialized: string): Promise<string>;
setLoadout(id: string): Promise<void>;
getRenderGraph(): Promise<object>;
dispose(): void;
}
@@ -140,12 +145,7 @@ declare module "@yawn/handles" {
}
export type VertexKind =
| "positions"
| "normals"
| "tangents"
| "uvs"
| "colors"
| "indices";
"positions" | "normals" | "tangents" | "uvs" | "colors" | "indices";
export interface MeshOptions extends NodeOptions {
geometryId?: number;
material?: PBRMaterial;
@@ -167,8 +167,10 @@ declare module "@yawn/handles" {
): Promise<this>;
}
export interface CubeOptions
extends Omit<MeshOptions, "geometryId" | "vertexData"> {
export interface CubeOptions extends Omit<
MeshOptions,
"geometryId" | "vertexData"
> {
size?: number;
width?: number;
height?: number;
@@ -177,16 +179,20 @@ declare module "@yawn/handles" {
export class Cube extends Mesh {
constructor(scene: Scene, options?: CubeOptions);
}
export interface IcosphereOptions
extends Omit<MeshOptions, "geometryId" | "vertexData"> {
export interface IcosphereOptions extends Omit<
MeshOptions,
"geometryId" | "vertexData"
> {
radius?: number;
subdivisions?: number;
}
export class Icosphere extends Mesh {
constructor(scene: Scene, options?: IcosphereOptions);
}
export interface PlaneOptions
extends Omit<MeshOptions, "geometryId" | "vertexData"> {
export interface PlaneOptions extends Omit<
MeshOptions,
"geometryId" | "vertexData"
> {
size?: number;
width?: number;
depth?: number;
@@ -194,8 +200,10 @@ declare module "@yawn/handles" {
export class Plane extends Mesh {
constructor(scene: Scene, options?: PlaneOptions);
}
export interface SphereOptions
extends Omit<MeshOptions, "geometryId" | "vertexData"> {
export interface SphereOptions extends Omit<
MeshOptions,
"geometryId" | "vertexData"
> {
radius?: number;
segments?: number;
rings?: number;
@@ -267,9 +275,13 @@ declare module "@yawn/handles" {
intensity?: number;
}
export class PointLight extends Node {
constructor(scene: Scene, options?: LightOptions & { range?: number });
constructor(
scene: Scene,
options?: LightOptions & { range?: number; radius?: number },
);
intensity: number;
range: number;
radius: number;
}
export class AmbientLight extends Node {
constructor(scene: Scene, options?: LightOptions);