diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e13b8c109f73d0..3f6b86b3a1b622 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -767,7 +767,6 @@ /types/carbon__colors/ @vpicone @szbihary /types/carbon__elements/ @metonym /types/carbon__layout/ @vpicone -/types/carbon__motion/ @vpicone /types/carbon__themes/ @vpicone /types/carbon__type/ @vpicone /types/carbone/ @apatryda diff --git a/notNeededPackages.json b/notNeededPackages.json index 87a1f9791b7127..d62a16463f424c 100644 --- a/notNeededPackages.json +++ b/notNeededPackages.json @@ -676,6 +676,10 @@ "libraryName": "@carbon/icons-react", "asOfVersion": "11.29.0" }, + "carbon__motion": { + "libraryName": "@carbon/motion", + "asOfVersion": "11.44.0" + }, "carbon__pictograms-react": { "libraryName": "@carbon/pictograms-react", "asOfVersion": "11.89.0" diff --git a/types/carbon__motion/.npmignore b/types/carbon__motion/.npmignore deleted file mode 100644 index 93e307400a5456..00000000000000 --- a/types/carbon__motion/.npmignore +++ /dev/null @@ -1,5 +0,0 @@ -* -!**/*.d.ts -!**/*.d.cts -!**/*.d.mts -!**/*.d.*.ts diff --git a/types/carbon__motion/carbon__motion-tests.ts b/types/carbon__motion/carbon__motion-tests.ts deleted file mode 100644 index 6bcc820f5d0795..00000000000000 --- a/types/carbon__motion/carbon__motion-tests.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { easings, motion } from "@carbon/motion"; - -const easingNames = Object.keys(easings); - -const firstEasing = easingNames[0]; -const firstMode = Object.keys(firstEasing)[0]; - -motion(firstEasing, firstMode); diff --git a/types/carbon__motion/index.d.ts b/types/carbon__motion/index.d.ts deleted file mode 100644 index 52deedca34f502..00000000000000 --- a/types/carbon__motion/index.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const easings: { - entrance: { - expressive: string; - productive: string; - }; - exit: { - expressive: string; - productive: string; - }; - standard: { - expressive: string; - productive: string; - }; -}; - -export function motion(name: string, mode: string): string; - -export namespace motion { - const prototype: {}; -} diff --git a/types/carbon__motion/package.json b/types/carbon__motion/package.json deleted file mode 100644 index ad44421cf57e76..00000000000000 --- a/types/carbon__motion/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "private": true, - "name": "@types/carbon__motion", - "version": "0.0.9999", - "projects": [ - "https://github.com/IBM/carbon-elements/tree/master/packages/motion" - ], - "devDependencies": { - "@types/carbon__motion": "workspace:." - }, - "owners": [ - { - "name": "Vince Picone", - "githubUsername": "vpicone" - } - ] -} diff --git a/types/carbon__motion/tsconfig.json b/types/carbon__motion/tsconfig.json deleted file mode 100644 index 4731060a780c6a..00000000000000 --- a/types/carbon__motion/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "module": "node16", - "lib": [ - "es6" - ], - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "types": [], - "noEmit": true, - "forceConsistentCasingInFileNames": true - }, - "files": [ - "index.d.ts", - "carbon__motion-tests.ts" - ] -} diff --git a/types/express-session/express-session-tests.ts b/types/express-session/express-session-tests.ts index 5438aab5101630..a52a4bf3519810 100644 --- a/types/express-session/express-session-tests.ts +++ b/types/express-session/express-session-tests.ts @@ -73,6 +73,13 @@ app.use( }), ); +app.use( + session({ + secret: "keyboard cat", + cookie: (req) => ({ secure: req.secure }), + }), +); + // Various `crypto.CipherKey` types app.use(session({ secret: Buffer.from("keyboard cat", "utf8") })); app.use(session({ secret: crypto.createSecretKey(Buffer.from("keyboard cat", "utf8")) })); diff --git a/types/express-session/index.d.ts b/types/express-session/index.d.ts index 27ea3059a3d8ce..edec8cdf0688ba 100644 --- a/types/express-session/index.d.ts +++ b/types/express-session/index.d.ts @@ -85,10 +85,10 @@ declare namespace session { store?: Store | undefined; /** - * Settings object for the session ID cookie. + * Settings object for the session ID cookie, or a callback that dynamically generates it based on the incoming request. * @see CookieOptions */ - cookie?: CookieOptions | undefined; + cookie?: CookieOptions | ((req: express.Request) => CookieOptions) | undefined; /** * Force the session identifier cookie to be set on every response. The expiration is reset to the original `maxAge`, resetting the expiration countdown. diff --git a/types/express-session/package.json b/types/express-session/package.json index 1c00efd96c459a..039fcdb28530c5 100644 --- a/types/express-session/package.json +++ b/types/express-session/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@types/express-session", - "version": "1.18.9999", + "version": "1.19.9999", "projects": [ "https://github.com/expressjs/session" ], diff --git a/types/mssql/index.d.ts b/types/mssql/index.d.ts index 3bd93e0fff61b8..8df170ee8db861 100644 --- a/types/mssql/index.d.ts +++ b/types/mssql/index.d.ts @@ -209,6 +209,7 @@ export interface config { pool?: PoolOpts | undefined; arrayRowMode?: boolean | undefined; authentication?: tds.ConnectionAuthentication | undefined; + validateConnection?: "socket" | boolean | undefined; /** * Invoked before opening the connection. The parameter conn is the configured * tedious Connection. It can be used for attaching event handlers. diff --git a/types/mssql/package.json b/types/mssql/package.json index c15b0f00d809ab..b227ece084532f 100644 --- a/types/mssql/package.json +++ b/types/mssql/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@types/mssql", - "version": "9.1.9999", + "version": "12.3.9999", "projects": [ "https://www.npmjs.com/package/mssql" ], diff --git a/types/pdfkit/index.d.ts b/types/pdfkit/index.d.ts index baf6d1016e3a2c..6eb05a8e03beee 100644 --- a/types/pdfkit/index.d.ts +++ b/types/pdfkit/index.d.ts @@ -1,5 +1,7 @@ /// +type PDFKitReadable = import("stream").Readable; + declare namespace PDFKit { interface PDFGradient { new(document: any): PDFGradient; @@ -862,7 +864,7 @@ declare namespace PDFKit { interface PDFDocument extends - NodeJS.ReadableStream, + PDFKitReadable, Mixins.PDFMetadata, Mixins.PDFAnnotation, Mixins.PDFColor, diff --git a/types/pdfkit/pdfkit-tests.ts b/types/pdfkit/pdfkit-tests.ts index a1714dfbc70f5c..fb4ff0513cb35a 100644 --- a/types/pdfkit/pdfkit-tests.ts +++ b/types/pdfkit/pdfkit-tests.ts @@ -10,6 +10,7 @@ import mtext = require("pdfkit/js/mixins/text"); import PDFDocument = require("pdfkit"); import PDFDocumentStandalone = require("pdfkit/js/pdfkit.standalone"); +import stream = require("stream"); import font = require("pdfkit/js/mixins/fonts"); import pdfData = require("pdfkit/js/data"); @@ -34,6 +35,15 @@ var doc: PDFKit.PDFDocument = new PDFDocument({ fontLayoutCache: true, }); +const readable: stream.Readable = doc; + +// $ExpectType PDFDocument +doc.destroy(); +// $ExpectType boolean +doc.destroyed; +// $ExpectType boolean +doc.readableEnded; + // $ExpectType PDFDocument doc.addPage(); // $ExpectType PDFDocument diff --git a/types/three/examples/jsm/Addons.d.ts b/types/three/examples/jsm/Addons.d.ts index 285b5e3a1f02df..ae8067aef49f9c 100644 --- a/types/three/examples/jsm/Addons.d.ts +++ b/types/three/examples/jsm/Addons.d.ts @@ -30,6 +30,7 @@ export * from "./effects/OutlineEffect.js"; export * from "./effects/ParallaxBarrierEffect.js"; export * from "./effects/StereoEffect.js"; +export * from "./environments/ColorEnvironment.js"; export * from "./environments/DebugEnvironment.js"; export * from "./environments/RoomEnvironment.js"; @@ -51,9 +52,11 @@ export * from "./geometries/RoundedBoxGeometry.js"; export * from "./geometries/TeapotGeometry.js"; export * from "./geometries/TextGeometry.js"; +export * from "./helpers/AnimationPathHelper.js"; export * from "./helpers/LightProbeHelper.js"; export * from "./helpers/OctreeHelper.js"; export * from "./helpers/PositionalAudioHelper.js"; +export * from "./helpers/RapierHelper.js"; export * from "./helpers/RectAreaLightHelper.js"; export * from "./helpers/TextureHelper.js"; export * from "./helpers/VertexNormalsHelper.js"; @@ -98,6 +101,7 @@ export * from "./loaders/LDrawLoader.js"; export * from "./loaders/LottieLoader.js"; export * from "./loaders/LUT3dlLoader.js"; export * from "./loaders/LUTCubeLoader.js"; +export * from "./loaders/LUTImageLoader.js"; export * from "./loaders/LWOLoader.js"; export * from "./loaders/MD2Loader.js"; export * from "./loaders/MDDLoader.js"; @@ -126,6 +130,7 @@ export * from "./materials/LDrawConditionalLineMaterial.js"; export * from "./math/Capsule.js"; export * from "./math/ColorConverter.js"; +export * as ColorSpaces from "./math/ColorSpaces.js"; export * from "./math/ConvexHull.js"; export * from "./math/ImprovedNoise.js"; export * from "./math/Lut.js"; @@ -165,6 +170,7 @@ export { Water as Water2 } from "./objects/Water2.js"; export type { WaterOptions as Water2Options } from "./objects/Water2.js"; export * from "./physics/AmmoPhysics.js"; +export * from "./physics/JoltPhysics.js"; export * from "./physics/RapierPhysics.js"; export * from "./postprocessing/AfterimagePass.js"; @@ -175,6 +181,7 @@ export * from "./postprocessing/CubeTexturePass.js"; export * from "./postprocessing/DotScreenPass.js"; export * from "./postprocessing/EffectComposer.js"; export * from "./postprocessing/FilmPass.js"; +export * from "./postprocessing/FXAAPass.js"; export * from "./postprocessing/GlitchPass.js"; export * from "./postprocessing/GTAOPass.js"; export * from "./postprocessing/HalftonePass.js"; @@ -185,6 +192,7 @@ export * from "./postprocessing/OutputPass.js"; export * from "./postprocessing/Pass.js"; export * from "./postprocessing/RenderPass.js"; export * from "./postprocessing/RenderPixelatedPass.js"; +export * from "./postprocessing/RenderTransitionPass.js"; export * from "./postprocessing/SAOPass.js"; export * from "./postprocessing/SavePass.js"; export * from "./postprocessing/ShaderPass.js"; @@ -234,6 +242,7 @@ export * from "./shaders/LuminosityShader.js"; export * from "./shaders/MirrorShader.js"; export * from "./shaders/NormalMapShader.js"; export * from "./shaders/OutputShader.js"; +export * from "./shaders/PoissonDenoiseShader.js"; export * from "./shaders/RGBShiftShader.js"; export * from "./shaders/SAOShader.js"; export * from "./shaders/SepiaShader.js"; @@ -257,9 +266,11 @@ export * from "./textures/FlakesTexture.js"; export * as BufferGeometryUtils from "./utils/BufferGeometryUtils.js"; export * as CameraUtils from "./utils/CameraUtils.js"; +export * as ColorUtils from "./utils/ColorUtils.js"; export * as GeometryCompressionUtils from "./utils/GeometryCompressionUtils.js"; export * as GeometryUtils from "./utils/GeometryUtils.js"; export * from "./utils/LDrawUtils.js"; +export * from "./utils/SceneOptimizer.js"; export * as SceneUtils from "./utils/SceneUtils.js"; export * from "./utils/ShadowMapViewer.js"; export * as SkeletonUtils from "./utils/SkeletonUtils.js"; diff --git a/types/three/examples/jsm/controls/FirstPersonControls.d.ts b/types/three/examples/jsm/controls/FirstPersonControls.d.ts index 52df3eac59c7c0..f3890ef60c47aa 100644 --- a/types/three/examples/jsm/controls/FirstPersonControls.d.ts +++ b/types/three/examples/jsm/controls/FirstPersonControls.d.ts @@ -24,11 +24,6 @@ declare class FirstPersonControls extends Controls<{}> { */ autoForward: boolean; - /** - * Whether or not it's possible to look around. Default is `true`. - */ - activeLook: boolean; - /** * Whether or not the camera's height influences the forward movement speed. Default is `false`. * Use the properties {@link .heightCoef}, {@link .heightMin} and {@link .heightMax} for configuration @@ -78,11 +73,6 @@ declare class FirstPersonControls extends Controls<{}> { */ constructor(object: Camera, domElement?: HTMLElement | SVGElement); - /** - * Should be called if the application window is resized. - */ - handleResize(): void; - /** * Ensures the controls orient the camera towards the defined target position. * @param vector A vector representing the target position. @@ -96,6 +86,11 @@ declare class FirstPersonControls extends Controls<{}> { * @param z The z component of the world space position. */ lookAt(x: number, y: number, z: number): this; + + /** + * @deprecated The controls now handle resize internally. + */ + handleResize(): void; } export { FirstPersonControls }; diff --git a/types/three/examples/jsm/controls/TransformControls.d.ts b/types/three/examples/jsm/controls/TransformControls.d.ts index 3866f9bc388072..43681160e15295 100644 --- a/types/three/examples/jsm/controls/TransformControls.d.ts +++ b/types/three/examples/jsm/controls/TransformControls.d.ts @@ -38,6 +38,9 @@ export interface TransformControlsEventMap { "showX-changed": { value: unknown }; "showY-changed": { value: unknown }; "showZ-changed": { value: unknown }; + "showXY-changed": { value: unknown }; + "showYZ-changed": { value: unknown }; + "showXZ-changed": { value: unknown }; "minX-changed": { value: unknown }; "maxX-changed": { value: unknown }; "minY-changed": { value: unknown }; @@ -128,6 +131,27 @@ declare class TransformControls extends Controls { */ showZ: boolean; + /** + * Whether the xy-plane helper should be visible or not. + * + * @default true + */ + showXY: boolean; + + /** + * Whether the xy-plane helper should be visible or not. + * + * @default true + */ + showYZ: boolean; + + /** + * Whether the xy-plane helper should be visible or not. + * + * @default true + */ + showXZ: boolean; + /** * The minimum allowed X position during translation. Default is `-Infinity`. */ diff --git a/types/three/examples/jsm/geometries/TextGeometry.d.ts b/types/three/examples/jsm/geometries/TextGeometry.d.ts index bb8dca78de3e65..656002400d1ad8 100644 --- a/types/three/examples/jsm/geometries/TextGeometry.d.ts +++ b/types/three/examples/jsm/geometries/TextGeometry.d.ts @@ -3,110 +3,82 @@ import { ExtrudeGeometry, ExtrudeGeometryOptions, Shape } from "three"; import { Font } from "../loaders/FontLoader.js"; export interface TextGeometryParameters extends ExtrudeGeometryOptions { + /** + * The font. + */ font: Font; /** - * Size of the text - * Expects a `Float`. - * @defaultValue `100` + * The text size. + * @default 100 */ size?: number | undefined; /** - * Thickness to extrude text. - * Expects a `Float`. - * @defaultValue `50` + * Depth to extrude the shape. + * @default 50 */ depth?: number | undefined; /** - * @override - * @defaultValue `12` - */ - curveSegments?: number | undefined; - - /** - * @defaultValue `false` + * Whether to beveling to the shape or not. + * @default false */ bevelEnabled?: boolean | undefined; /** - * How deep into text bevel goes. - * Expects a `Float`. - * @override - * @defaultValue `10` + * How deep into the original shape the bevel goes. + * @default 10 */ bevelThickness?: number | undefined; /** - * How far from text outline is bevel. - * Expects a `Float`. - * @override - * @defaultValue `8` + * Distance from the shape outline that the bevel extends. + * @default 8 */ bevelSize?: number | undefined; - /** - * How far from text outline bevel starts. - * Expects a `Float`. - * @override - * @defaultValue `0` - */ - bevelOffset?: number | undefined; - - /** - * @override - * @defaultValue `3` - */ - bevelSegments?: number | undefined; - direction?: "ltr" | "rtl" | "tb" | undefined; } /** - * A class for generating text as a single geometry - * @remarks - * It is constructed by providing a string of text, and a set of parameters consisting of a loaded font and settings for the geometry's parent {@link THREE.ExtrudeGeometry | ExtrudeGeometry} - * See the {@link THREE.FontLoader | FontLoader} page for additional details. - * @example - * ```typescript + * A class for generating text as a single geometry. It is constructed by providing a string of text, and a set of + * parameters consisting of a loaded font and extrude settings. + * + * See the {@link FontLoader} page for additional details. + * + * `TextGeometry` uses [typeface.json](http://gero3.github.io/facetype.js/) generated fonts. + * Some existing fonts can be found located in `/examples/fonts`. + * + * ```js * const loader = new FontLoader(); - * loader.load('fonts/helvetiker_regular.typeface.json', function (font) { - * const geometry = new TextGeometry('Hello three.js!', { - * font: font, - * size: 80, - * height: 5, - * curveSegments: 12, - * bevelEnabled: true, - * bevelThickness: 10, - * bevelSize: 8, - * bevelOffset: 0, - * bevelSegments: 5 - * }); - * }); + * const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' ); + * const geometry = new TextGeometry( 'Hello three.js!', { + * font: font, + * size: 80, + * depth: 5, + * curveSegments: 12 + * } ); * ``` - * @see Example: {@link https://threejs.org/examples/#webgl_geometry_text | geometry / text } - * @see {@link https://threejs.org/docs/index.html#api/en/C:/rafaelsc/Source/threejs/three.js/docs/examples/en/geometries/TextGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/examples/jsm/geometries/TextGeometry.js | Source} + * + * @augments ExtrudeGeometry + * @three_import import { TextGeometry } from 'three/addons/geometries/TextGeometry.js'; */ -export class TextGeometry extends ExtrudeGeometry { +declare class TextGeometry extends ExtrudeGeometry { /** - * Create a new instance of {@link TextGeometry} - * @param text The text that needs to be shown. - * @param parameters Object that can contain the following parameters. @see {@link TextGeometryParameters} for defaults. + * Constructs a new text geometry. + * + * @param {string} text - The text that should be transformed into a geometry. + * @param {TextGeometry~Options} [parameters] - The text settings. */ constructor(text: string, parameters?: TextGeometryParameters); /** - * A Read-only _string_ to check if `this` object type. - * @remarks Sub-classes will update this value. - * @defaultValue `TextGeometry` - */ - override readonly type: string | "TextGeometry"; - - /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. + * Holds the constructor parameters that have been + * used to generate the geometry. Any modification + * after instantiation does not change the geometry. + * + * @type {Object} */ readonly parameters: { readonly shapes: Shape | Shape[]; @@ -114,4 +86,4 @@ export class TextGeometry extends ExtrudeGeometry { }; } -export { TextGeometry as TextBufferGeometry }; +export { TextGeometry }; diff --git a/types/three/examples/jsm/helpers/LightProbeGridHelper.d.ts b/types/three/examples/jsm/helpers/LightProbeGridHelper.d.ts new file mode 100644 index 00000000000000..449b9229d0f866 --- /dev/null +++ b/types/three/examples/jsm/helpers/LightProbeGridHelper.d.ts @@ -0,0 +1,12 @@ +import { InstancedMesh, ShaderMaterial, SphereGeometry } from "three"; +import { LightProbeGrid } from "../lighting/LightProbeGrid.js"; + +declare class LightProbeGridHelper extends InstancedMesh { + probes: LightProbeGrid; + + constructor(probes: LightProbeGrid, sphereSize?: number); + + update(): void; +} + +export { LightProbeGridHelper }; diff --git a/types/three/examples/jsm/inspector/Extension.d.ts b/types/three/examples/jsm/inspector/Extension.d.ts new file mode 100644 index 00000000000000..6a6a383a040b54 --- /dev/null +++ b/types/three/examples/jsm/inspector/Extension.d.ts @@ -0,0 +1,9 @@ +import { Tab, TabEventMap } from "./ui/Tab.js"; + +export interface ExtensionEventMap extends TabEventMap {} + +export class Extension extends Tab { + readonly isExtension: boolean; + + constructor(name: string); +} diff --git a/types/three/examples/jsm/inspector/Inspector.d.ts b/types/three/examples/jsm/inspector/Inspector.d.ts index 12eac3e13dd742..55fe8c2e7604ff 100644 --- a/types/three/examples/jsm/inspector/Inspector.d.ts +++ b/types/three/examples/jsm/inspector/Inspector.d.ts @@ -1,10 +1,29 @@ -import { RendererInspector } from "./RendererInspector.js"; +import { TSLGraphEditor } from "./extensions/tsl-graph/TSLGraphEditor.js"; +import { RendererInspector, RendererInspectorEventMap } from "./RendererInspector.js"; import { ParametersGroup } from "./tabs/Parameters.js"; +import { Tab } from "./ui/Tab.js"; -declare class Inspector extends RendererInspector { +export interface InspectorEventMap extends RendererInspectorEventMap { + resize: {}; +} + +declare class Inspector extends RendererInspector { createParameters(name: string): ParametersGroup; get domElement(): HTMLDivElement; + + onExtension(name: "TSL Graph", callback: (extension: TSLGraphEditor) => void): this; + + hide(): void; + show(): void; + + getSize(): { width: number; height: number }; + + setActiveTab(tab: Tab): this; + addTab(tab: Tab): this; + removeTab(tab: Tab): this; + + setActiveExtension(name: "TSL Graph", value: boolean): this; } export { Inspector }; diff --git a/types/three/examples/jsm/inspector/RendererInspector.d.ts b/types/three/examples/jsm/inspector/RendererInspector.d.ts index a69a469d2c7f2f..25714b94077347 100644 --- a/types/three/examples/jsm/inspector/RendererInspector.d.ts +++ b/types/three/examples/jsm/inspector/RendererInspector.d.ts @@ -1,4 +1,9 @@ -import { InspectorBase } from "three/webgpu"; +import { InspectorBase, InspectorBaseEventMap } from "three/webgpu"; -export class RendererInspector extends InspectorBase { +export interface RendererInspectorEventMap extends InspectorBaseEventMap { +} + +export class RendererInspector + extends InspectorBase +{ } diff --git a/types/three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.d.ts b/types/three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.d.ts new file mode 100644 index 00000000000000..f4ba0fb003d1e4 --- /dev/null +++ b/types/three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.d.ts @@ -0,0 +1,20 @@ +import { Material } from "../../../../../src/materials/Material.js"; +import { Scene } from "../../../../../src/scenes/Scene.js"; +import { Extension, ExtensionEventMap } from "../../Extension.js"; + +interface TSLGraphEditorEventMap extends ExtensionEventMap { + change: { material: Material }; + remove: { graphId: string }; +} + +export class TSLGraphEditor extends Extension { + constructor(); + + get hasGraphs(): boolean; + + apply(scene: Scene): this; + + restoreMaterial(material: Material): void; + + setMaterial(material: Material): Promise; +} diff --git a/types/three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.d.ts b/types/three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.d.ts new file mode 100644 index 00000000000000..b677620219b412 --- /dev/null +++ b/types/three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.d.ts @@ -0,0 +1,11 @@ +import { FileLoader, LoadingManager, Scene } from "three"; + +declare class TSLGraphLoaderApplier { + constructor(tslGraphFns: never); + + apply(scene: Scene): void; +} + +export class TSLGraphLoader extends FileLoader { + constructor(manager?: LoadingManager); +} diff --git a/types/three/examples/jsm/inspector/tabs/Parameters.d.ts b/types/three/examples/jsm/inspector/tabs/Parameters.d.ts index fb1a609863a1e6..ef32caf7f665d0 100644 --- a/types/three/examples/jsm/inspector/tabs/Parameters.d.ts +++ b/types/three/examples/jsm/inspector/tabs/Parameters.d.ts @@ -1,6 +1,14 @@ import { Item } from "../ui/Item.js"; import { Tab } from "../ui/Tab.js"; -import { ValueButton, ValueCheckbox, ValueColor, ValueNumber, ValueSelect, ValueSlider } from "../ui/Values.js"; +import { + ValueButton, + ValueCheckbox, + ValueColor, + ValueNumber, + ValueSelect, + ValueSlider, + ValueString, +} from "../ui/Values.js"; type KeyToValueOfType = { [K in keyof T]: T[K] extends V ? K : never }[keyof T]; @@ -35,6 +43,14 @@ interface ValueCheckboxWithParameters< listen: () => this; } +interface ValueStringWithParameters< + T = Record, + K extends KeyToValueOfType = KeyToValueOfType, +> extends ValueString { + name: (name: string) => this; + listen: () => this; +} + interface ValueButtonWithParameters< T = Record, K extends KeyToValueOfType void> = KeyToValueOfType void>, @@ -79,6 +95,11 @@ declare class ParametersGroup { property: K, options?: never, ): ValueCheckboxWithParameters; + add>( + object: T, + property: K, + options?: never, + ): ValueStringWithParameters; add void>>( object: T, property: K, diff --git a/types/three/examples/jsm/inspector/ui/Tab.d.ts b/types/three/examples/jsm/inspector/ui/Tab.d.ts index cb47d31f5fe668..e45d2c9db5eb0f 100644 --- a/types/three/examples/jsm/inspector/ui/Tab.d.ts +++ b/types/three/examples/jsm/inspector/ui/Tab.d.ts @@ -1,3 +1,7 @@ -export class Tab { +import { EventDispatcher } from "../../../../src/core/EventDispatcher.js"; + +export interface TabEventMap {} + +export class Tab extends EventDispatcher { constructor(title: string); } diff --git a/types/three/examples/jsm/inspector/ui/Values.d.ts b/types/three/examples/jsm/inspector/ui/Values.d.ts index a0bfcb24bbedf1..4b9d5b36f3f6fa 100644 --- a/types/three/examples/jsm/inspector/ui/Values.d.ts +++ b/types/three/examples/jsm/inspector/ui/Values.d.ts @@ -2,7 +2,13 @@ import { ColorRepresentation, EventDispatcher } from "three"; type KeyToValueOfType = { [K in keyof T]: T[K] extends V ? K : never }[keyof T]; -declare class Value, K extends keyof T = keyof T> extends EventDispatcher { +export interface ValueEventMap {} + +declare class Value< + T = Record, + K extends keyof T = keyof T, + TEventMap extends ValueEventMap = ValueEventMap, +> extends EventDispatcher { onChange(callback: (value: T[K]) => void): this; } @@ -74,7 +80,21 @@ declare class ValueButton< T = Record, K extends KeyToValueOfType void> = KeyToValueOfType void>, > extends Value { - constructor(params: ValueColorParams); + constructor(params: ValueButtonParams); +} + +export interface ValueStringParams { + value?: string; +} + +declare class ValueString< + T = Record, + K extends KeyToValueOfType = KeyToValueOfType, +> extends Value { + constructor(params: ValueStringParams); + + setValue(val: string): this; + getValue(): string; } -export { Value, ValueButton, ValueCheckbox, ValueColor, ValueNumber, ValueSelect, ValueSlider }; +export { Value, ValueButton, ValueCheckbox, ValueColor, ValueNumber, ValueSelect, ValueSlider, ValueString }; diff --git a/types/three/examples/jsm/interaction/InteractionManager.d.ts b/types/three/examples/jsm/interaction/InteractionManager.d.ts new file mode 100644 index 00000000000000..5652f8e676bd6b --- /dev/null +++ b/types/three/examples/jsm/interaction/InteractionManager.d.ts @@ -0,0 +1,18 @@ +import { Camera, Object3D, WebGLRenderer } from "three"; +import { WebGPURenderer } from "three/webgpu"; + +declare class InteractionManager { + objects: Object3D[]; + element: HTMLCanvasElement | null; + camera: Camera | null; + + constructor(); + + add(...objects: Object3D[]): this; + remove(...objects: Object3D[]): this; + connect(renderer: WebGPURenderer | WebGLRenderer, camera: Camera): this; + update(): void; + disconnect(): void; +} + +export { InteractionManager }; diff --git a/types/three/examples/jsm/lighting/DynamicLighting.d.ts b/types/three/examples/jsm/lighting/DynamicLighting.d.ts new file mode 100644 index 00000000000000..53103f029ff3db --- /dev/null +++ b/types/three/examples/jsm/lighting/DynamicLighting.d.ts @@ -0,0 +1,16 @@ +import { Lighting } from "three/webgpu"; + +export interface DynamicLightingOptions { + maxDirectionalLights?: number | undefined; + maxPointLights?: number | undefined; + maxSpotLights?: number | undefined; + maxHemisphereLights?: number | undefined; +} + +export class DynamicLighting extends Lighting { + options: DynamicLightingOptions; + + constructor(options?: DynamicLightingOptions); +} + +export default DynamicLighting; diff --git a/types/three/examples/jsm/lighting/LightProbeGrid.d.ts b/types/three/examples/jsm/lighting/LightProbeGrid.d.ts new file mode 100644 index 00000000000000..c69b0af841fd58 --- /dev/null +++ b/types/three/examples/jsm/lighting/LightProbeGrid.d.ts @@ -0,0 +1,34 @@ +import { Box3, Data3DTexture, Object3D, Scene, Vector3, WebGLRenderer } from "three"; + +export interface LightProbeGridBakeOptions { + cubemapSize?: number | undefined; + near?: number | undefined; + far?: number | undefined; +} + +declare class LightProbeGrid extends Object3D { + readonly isLightProbeGrid: boolean; + + width: number; + height: number; + depth: number; + resolution: Vector3; + boundingBox: Box3; + texture: Data3DTexture | null; + + constructor( + width?: number, + height?: number, + depth?: number, + widthProbes?: number, + heightProbes?: number, + depthProbes?: number, + ); + + getProbePosition(ix: number, iy: number, iz: number, target: Vector3): Vector3; + updateBoundingBox(): void; + bake(renderer: WebGLRenderer, scene: Scene, options?: LightProbeGridBakeOptions): void; + dispose(): void; +} + +export { LightProbeGrid }; diff --git a/types/three/examples/jsm/loaders/ColladaLoader.d.ts b/types/three/examples/jsm/loaders/ColladaLoader.d.ts index 70efc74fe7013e..42117ccbbb530a 100644 --- a/types/three/examples/jsm/loaders/ColladaLoader.d.ts +++ b/types/three/examples/jsm/loaders/ColladaLoader.d.ts @@ -21,6 +21,7 @@ export interface ColladaLibrary { kinematicsModels: Record; physicsModels: Record; kinematicsScenes: Record; + joints: Record; } export interface Collada { diff --git a/types/three/examples/jsm/loaders/EXRLoader.d.ts b/types/three/examples/jsm/loaders/EXRLoader.d.ts index e767c0a308a56d..bd3d157557662e 100644 --- a/types/three/examples/jsm/loaders/EXRLoader.d.ts +++ b/types/three/examples/jsm/loaders/EXRLoader.d.ts @@ -23,10 +23,12 @@ export interface EXR { declare class EXRLoader extends DataTextureLoader { type: TextureDataType; outputFormat: typeof RGBAFormat | typeof RGFormat | typeof RedFormat; + part: number; constructor(manager?: LoadingManager); parse(buffer: ArrayBuffer): EXR; setDataType(type: typeof HalfFloatType | typeof FloatType): this; setOutputFormat(value: typeof RGBAFormat | typeof RGFormat | typeof RedFormat): this; + setPart(value: number): this; } diff --git a/types/three/examples/jsm/loaders/LDrawLoader.d.ts b/types/three/examples/jsm/loaders/LDrawLoader.d.ts index 3867b219216cc2..02edcf8d3d2016 100644 --- a/types/three/examples/jsm/loaders/LDrawLoader.d.ts +++ b/types/three/examples/jsm/loaders/LDrawLoader.d.ts @@ -4,7 +4,7 @@ import { LDrawConditionalLineMaterial as LDrawConditionalLineNodeMaterial } from export class LDrawLoader extends Loader { materials: Material[]; - materialsLibrary: Record; + materialLibrary: Record; fileMap: Record; diff --git a/types/three/examples/jsm/loaders/VTKLoader.d.ts b/types/three/examples/jsm/loaders/VTKLoader.d.ts index 40e8c8a7680925..704bf37fdc6eab 100644 --- a/types/three/examples/jsm/loaders/VTKLoader.d.ts +++ b/types/three/examples/jsm/loaders/VTKLoader.d.ts @@ -1,6 +1,12 @@ import { BufferGeometry, Loader, LoadingManager } from "three"; +/** + * @deprecated The loader has been deprecated and will be removed with r194. Export your VTK files to glTF before using them on the web. + */ export class VTKLoader extends Loader { + /** + * @deprecated The loader has been deprecated and will be removed with r194. Export your VTK files to glTF before using them on the web. + */ constructor(manager?: LoadingManager); parse(data: ArrayBuffer | string, path: string): BufferGeometry; diff --git a/types/three/examples/jsm/objects/Reflector.d.ts b/types/three/examples/jsm/objects/Reflector.d.ts index 3bb9bd4a0dd4df..a5ff3bf8996201 100644 --- a/types/three/examples/jsm/objects/Reflector.d.ts +++ b/types/three/examples/jsm/objects/Reflector.d.ts @@ -1,4 +1,4 @@ -import { BufferGeometry, ColorRepresentation, Mesh, PerspectiveCamera, WebGLRenderTarget } from "three"; +import { BufferGeometry, ColorRepresentation, Mesh, WebGLRenderTarget } from "three"; export interface ReflectorOptions { color?: ColorRepresentation | undefined; @@ -12,7 +12,6 @@ export interface ReflectorOptions { export class Reflector extends Mesh { type: "Reflector"; forceUpdate: boolean; - camera: PerspectiveCamera; constructor(geometry?: BufferGeometry, options?: ReflectorOptions); diff --git a/types/three/examples/jsm/objects/SkyMesh.d.ts b/types/three/examples/jsm/objects/SkyMesh.d.ts index 7a8922f0404723..3db13f671ccc75 100644 --- a/types/three/examples/jsm/objects/SkyMesh.d.ts +++ b/types/three/examples/jsm/objects/SkyMesh.d.ts @@ -12,6 +12,7 @@ declare class SkyMesh extends Mesh { cloudCoverage: UniformNode<"float", number>; cloudDensity: UniformNode<"float", number>; cloudElevation: UniformNode<"float", number>; + showSunDisc: UniformNode<"float", number>; /** * @deprecated diff --git a/types/three/examples/jsm/tsl/WebGLNodesHandler.d.ts b/types/three/examples/jsm/tsl/WebGLNodesHandler.d.ts new file mode 100644 index 00000000000000..0a6440052e3003 --- /dev/null +++ b/types/three/examples/jsm/tsl/WebGLNodesHandler.d.ts @@ -0,0 +1,14 @@ +import { Camera } from "../../../src/cameras/Camera.js"; +import { Object3D } from "../../../src/core/Object3D.js"; +import { Material } from "../../../src/materials/Material.js"; +import { WebGLProgramParametersWithUniforms } from "../../../src/renderers/webgl/WebGLPrograms.js"; +import { WebGLRenderer } from "../../../src/renderers/WebGLRenderer.js"; + +export class WebGLNodesHandler { + constructor(); + + setRenderer(renderer: WebGLRenderer): void; + renderStart(scene: Object3D, camera: Camera): void; + renderEnd(): void; + build(material: Material, object: Object3D, parameters: WebGLProgramParametersWithUniforms): void; +} diff --git a/types/three/examples/jsm/tsl/display/FSR1Node.d.ts b/types/three/examples/jsm/tsl/display/FSR1Node.d.ts new file mode 100644 index 00000000000000..c87b85f993e213 --- /dev/null +++ b/types/three/examples/jsm/tsl/display/FSR1Node.d.ts @@ -0,0 +1,17 @@ +import { Node, TempNode, TextureNode } from "three/webgpu"; + +declare class FSR1Node extends TempNode<"vec4"> { + textureNode: TextureNode; + sharpness: Node<"float">; + denoise: Node<"bool">; + + constructor(textureNode: TextureNode, sharpness?: Node<"float"> | number, denoise?: Node<"bool"> | boolean); +} + +export default FSR1Node; + +export const fsr1: ( + node: Node<"vec4">, + sharpness?: Node<"float"> | number, + denoise?: Node<"bool"> | boolean, +) => FSR1Node; diff --git a/types/three/examples/jsm/tsl/display/SharpenNode.d.ts b/types/three/examples/jsm/tsl/display/SharpenNode.d.ts new file mode 100644 index 00000000000000..2e53d2b35620a6 --- /dev/null +++ b/types/three/examples/jsm/tsl/display/SharpenNode.d.ts @@ -0,0 +1,22 @@ +import { Node, TempNode, TextureNode } from "three/webgpu"; + +declare class SharpenNode extends TempNode<"vec4"> { + readonly isSharpenNode: boolean; + + textureNode: TextureNode; + sharpness: Node<"float">; + denoise: Node<"bool">; + + constructor(textureNode: TextureNode, sharpness?: Node<"float"> | number, denoise?: Node<"bool"> | boolean); + + setSize(width: number, height: number): void; + getTextureNode(): TextureNode; +} + +export default SharpenNode; + +export const sharpen: ( + node: Node<"vec4">, + sharpness?: Node<"float"> | number, + denoise?: Node<"bool"> | boolean, +) => SharpenNode; diff --git a/types/three/examples/jsm/tsl/display/TAAUNode.d.ts b/types/three/examples/jsm/tsl/display/TAAUNode.d.ts new file mode 100644 index 00000000000000..24f08ac5d85ca1 --- /dev/null +++ b/types/three/examples/jsm/tsl/display/TAAUNode.d.ts @@ -0,0 +1,31 @@ +import { Camera, TempNode, TextureNode } from "three/webgpu"; + +declare class TAAUNode extends TempNode<"vec4"> { + readonly isTAAUNode: boolean; + + beautyNode: TextureNode; + depthNode: TextureNode; + velocityNode: TextureNode; + camera: Camera; + + depthThreshold: number; + edgeDepthDiff: number; + maxVelocityLength: number; + currentFrameWeight: number; + + constructor(beautyNode: TextureNode, depthNode: TextureNode, velocityNode: TextureNode, camera: Camera); + + getTextureNode(): TextureNode; + setSize(outputWidth: number, outputHeight: number): void; + setViewOffset(inputWidth: number, inputHeight: number): void; + clearViewOffset(): void; +} + +export default TAAUNode; + +export const taau: ( + beautyNode: TextureNode, + depthNode: TextureNode, + velocityNode: TextureNode, + camera: Camera, +) => TAAUNode; diff --git a/types/three/examples/jsm/tsl/lighting/DynamicLightsNode.d.ts b/types/three/examples/jsm/tsl/lighting/DynamicLightsNode.d.ts new file mode 100644 index 00000000000000..a6a4675486c496 --- /dev/null +++ b/types/three/examples/jsm/tsl/lighting/DynamicLightsNode.d.ts @@ -0,0 +1,21 @@ +import { LightsNode } from "three/webgpu"; + +export interface DynamicLightsNodeOptions { + maxDirectionalLights?: number | undefined; + maxPointLights?: number | undefined; + maxSpotLights?: number | undefined; + maxHemisphereLights?: number | undefined; +} + +declare class DynamicLightsNode extends LightsNode { + maxDirectionalLights: number; + maxPointLights: number; + maxSpotLights: number; + maxHemisphereLights: number; + + constructor(options?: DynamicLightsNodeOptions); +} + +export default DynamicLightsNode; + +export const dynamicLights: (options?: DynamicLightsNodeOptions) => DynamicLightsNode; diff --git a/types/three/examples/jsm/tsl/lighting/TiledLightsNode.d.ts b/types/three/examples/jsm/tsl/lighting/TiledLightsNode.d.ts index 0a6f19bb6686d6..d7f1c49309bb0c 100644 --- a/types/three/examples/jsm/tsl/lighting/TiledLightsNode.d.ts +++ b/types/three/examples/jsm/tsl/lighting/TiledLightsNode.d.ts @@ -12,7 +12,7 @@ declare class TiledLightsNode extends LightsNode { updateLightsTexture(): void; - getBlock(block?: number): Node; + getBlock(block?: number): Node<"ivec4">; setSize(width: number, height: number): this; } diff --git a/types/three/examples/jsm/tsl/lighting/data/AmbientLightDataNode.d.ts b/types/three/examples/jsm/tsl/lighting/data/AmbientLightDataNode.d.ts new file mode 100644 index 00000000000000..894f72f3c5c169 --- /dev/null +++ b/types/three/examples/jsm/tsl/lighting/data/AmbientLightDataNode.d.ts @@ -0,0 +1,9 @@ +import { Color, Node, UniformNode } from "three/webgpu"; + +declare class AmbientLightDataNode extends Node { + colorNode: UniformNode<"color", Color>; + + constructor(); +} + +export default AmbientLightDataNode; diff --git a/types/three/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.d.ts b/types/three/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.d.ts new file mode 100644 index 00000000000000..6f1406d0a31c66 --- /dev/null +++ b/types/three/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.d.ts @@ -0,0 +1,9 @@ +import { Node } from "three/webgpu"; + +declare class DirectionalLightDataNode extends Node { + maxCount: number; + + constructor(maxCount?: number); +} + +export default DirectionalLightDataNode; diff --git a/types/three/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.d.ts b/types/three/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.d.ts new file mode 100644 index 00000000000000..d57c956d02bca1 --- /dev/null +++ b/types/three/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.d.ts @@ -0,0 +1,9 @@ +import { Node } from "three/webgpu"; + +declare class HemisphereLightDataNode extends Node { + maxCount: number; + + constructor(maxCount?: number); +} + +export default HemisphereLightDataNode; diff --git a/types/three/examples/jsm/tsl/lighting/data/PointLightDataNode.d.ts b/types/three/examples/jsm/tsl/lighting/data/PointLightDataNode.d.ts new file mode 100644 index 00000000000000..998c5282f58965 --- /dev/null +++ b/types/three/examples/jsm/tsl/lighting/data/PointLightDataNode.d.ts @@ -0,0 +1,9 @@ +import { Node } from "three/webgpu"; + +declare class PointLightDataNode extends Node { + maxCount: number; + + constructor(maxCount?: number); +} + +export default PointLightDataNode; diff --git a/types/three/examples/jsm/tsl/lighting/data/SpotLightDataNode.d.ts b/types/three/examples/jsm/tsl/lighting/data/SpotLightDataNode.d.ts new file mode 100644 index 00000000000000..74ae3715609fa7 --- /dev/null +++ b/types/three/examples/jsm/tsl/lighting/data/SpotLightDataNode.d.ts @@ -0,0 +1,9 @@ +import { Node } from "three/webgpu"; + +declare class SpotLightDataNode extends Node { + maxCount: number; + + constructor(maxCount?: number); +} + +export default SpotLightDataNode; diff --git a/types/three/examples/jsm/utils/ColorUtils.d.ts b/types/three/examples/jsm/utils/ColorUtils.d.ts new file mode 100644 index 00000000000000..24dd76bd7e3f57 --- /dev/null +++ b/types/three/examples/jsm/utils/ColorUtils.d.ts @@ -0,0 +1,5 @@ +import { Color } from "three"; + +declare function setKelvin(color: Color, kelvin: number): Color; + +export { setKelvin }; diff --git a/types/three/examples/jsm/utils/SceneOptimizer.d.ts b/types/three/examples/jsm/utils/SceneOptimizer.d.ts new file mode 100644 index 00000000000000..5855615988e6b7 --- /dev/null +++ b/types/three/examples/jsm/utils/SceneOptimizer.d.ts @@ -0,0 +1,18 @@ +import { Mesh, Object3D, Scene } from "three"; + +export interface SceneOptimizerOptions { + debug?: boolean | undefined; +} + +declare class SceneOptimizer { + scene: Scene; + debug: boolean; + + constructor(scene: Scene, options?: SceneOptimizerOptions); + + removeEmptyNodes(object: Object3D): void; + disposeMeshes(meshesToRemove: Set): void; + toBatchedMesh(): Scene; +} + +export { SceneOptimizer }; diff --git a/types/three/examples/jsm/webxr/XRHandMeshModel.d.ts b/types/three/examples/jsm/webxr/XRHandMeshModel.d.ts index 94d0c1432ebe44..c19481bc6fbef0 100644 --- a/types/three/examples/jsm/webxr/XRHandMeshModel.d.ts +++ b/types/three/examples/jsm/webxr/XRHandMeshModel.d.ts @@ -13,6 +13,7 @@ export class XRHandMeshModel { handedness: string, loader?: Loader | null, onLoad?: ((object: Object3D) => void) | null, + customCache?: Record | null, ); updateMesh(): void; diff --git a/types/three/package.json b/types/three/package.json index 51f09c34d04ec9..fae70643eb4c01 100644 --- a/types/three/package.json +++ b/types/three/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@types/three", - "version": "0.183.9999", + "version": "0.184.9999", "projects": [ "https://threejs.org/" ], @@ -24,9 +24,8 @@ "@tweenjs/tween.js": "~23.1.3", "@types/stats.js": "*", "@types/webxr": ">=0.5.17", - "@webgpu/types": "*", "fflate": "~0.8.2", - "meshoptimizer": "~1.0.1" + "meshoptimizer": "~1.1.1" }, "devDependencies": { "@types/three": "workspace:." diff --git a/types/three/src/Three.Core.d.ts b/types/three/src/Three.Core.d.ts index 07c40f4b79ad54..ff2fd96f5ec447 100644 --- a/types/three/src/Three.Core.d.ts +++ b/types/three/src/Three.Core.d.ts @@ -141,7 +141,17 @@ export * from "./objects/Sprite.js"; export * from "./renderers/WebGL3DRenderTarget.js"; export * from "./renderers/WebGLArrayRenderTarget.js"; export * from "./renderers/WebGLRenderTarget.js"; -export * from "./renderers/webxr/WebXRController.js"; +export { + WebXRController, + type WebXRSpaceEventMap, + type XRControllerEventType, + type XRGripSpace, + type XRHandInputState, + type XRHandJoints, + type XRHandSpace, + type XRJointSpace, + type XRTargetRaySpace, +} from "./renderers/webxr/WebXRController.js"; export * from "./scenes/Fog.js"; export * from "./scenes/FogExp2.js"; export * from "./scenes/Scene.js"; @@ -149,6 +159,7 @@ export * from "./textures/CanvasTexture.js"; export * from "./textures/CompressedArrayTexture.js"; export * from "./textures/CompressedCubeTexture.js"; export * from "./textures/CompressedTexture.js"; +export * from "./textures/CubeDepthTexture.js"; export * from "./textures/CubeTexture.js"; export * from "./textures/Data3DTexture.js"; export * from "./textures/DataArrayTexture.js"; @@ -156,6 +167,7 @@ export * from "./textures/DataTexture.js"; export * from "./textures/DepthTexture.js"; export * from "./textures/ExternalTexture.js"; export * from "./textures/FramebufferTexture.js"; +export * from "./textures/HTMLTexture.js"; export * from "./textures/Source.js"; export * from "./textures/Texture.js"; export * from "./textures/VideoFrameTexture.js"; diff --git a/types/three/src/Three.TSL.d.ts b/types/three/src/Three.TSL.d.ts index 454c8b9ad11e19..796ce8c80b4fd0 100644 --- a/types/three/src/Three.TSL.d.ts +++ b/types/three/src/Three.TSL.d.ts @@ -40,6 +40,7 @@ export const VarIntent: typeof TSL.VarIntent; export const abs: typeof TSL.abs; export const acesFilmicToneMapping: typeof TSL.acesFilmicToneMapping; export const acos: typeof TSL.acos; +export const acosh: typeof TSL.acosh; export const add: typeof TSL.add; export const addMethodChaining: typeof TSL.addMethodChaining; export const addNodeElement: typeof TSL.addNodeElement; @@ -55,8 +56,10 @@ export const append: typeof TSL.append; export const array: typeof TSL.array; export const arrayBuffer: typeof TSL.arrayBuffer; export const asin: typeof TSL.asin; +export const asinh: typeof TSL.asinh; export const assign: typeof TSL.assign; export const atan: typeof TSL.atan; +export const atanh: typeof TSL.atanh; export const atomicAdd: typeof TSL.atomicAdd; export const atomicAnd: typeof TSL.atomicAnd; export const atomicFunc: typeof TSL.atomicFunc; @@ -140,6 +143,7 @@ export const countLeadingZeros: typeof TSL.countLeadingZeros; export const countOneBits: typeof TSL.countOneBits; export const countTrailingZeros: typeof TSL.countTrailingZeros; export const cos: typeof TSL.cos; +export const cosh: typeof TSL.cosh; export const cross: typeof TSL.cross; export const cubeTexture: typeof TSL.cubeTexture; export const cubeTextureBase: typeof TSL.cubeTextureBase; @@ -217,7 +221,7 @@ export const greaterThan: typeof TSL.greaterThan; export const greaterThanEqual: typeof TSL.greaterThanEqual; export const hash: typeof TSL.hash; export const highpModelNormalViewMatrix: typeof TSL.highpModelNormalViewMatrix; -export const highPrecisionModelViewMatrix: typeof TSL.highpModelViewMatrix; +export const highpModelViewMatrix: typeof TSL.highpModelViewMatrix; export const hue: typeof TSL.hue; export const increment: typeof TSL.increment; export const incrementBefore: typeof TSL.incrementBefore; @@ -497,6 +501,7 @@ export const shiftRight: typeof TSL.shiftRight; export const shininess: typeof TSL.shininess; export const sign: typeof TSL.sign; export const sin: typeof TSL.sin; +export const sinh: typeof TSL.sinh; export const sinc: typeof TSL.sinc; export const skinning: typeof TSL.skinning; export const smoothstep: typeof TSL.smoothstep; @@ -541,6 +546,7 @@ export const subgroupShuffleXor: typeof TSL.subgroupShuffleXor; export const subgroupSize: typeof TSL.subgroupSize; export const subgroupXor: typeof TSL.subgroupXor; export const tan: typeof TSL.tan; +export const tanh: typeof TSL.tanh; export const tangentGeometry: typeof TSL.tangentGeometry; export const tangentLocal: typeof TSL.tangentLocal; export const tangentView: typeof TSL.tangentView; diff --git a/types/three/src/Three.WebGPU.Nodes.d.ts b/types/three/src/Three.WebGPU.Nodes.d.ts index e3288943b5b5ce..c8e003076f7881 100644 --- a/types/three/src/Three.WebGPU.Nodes.d.ts +++ b/types/three/src/Three.WebGPU.Nodes.d.ts @@ -1,13 +1,17 @@ export * from "./Three.Core.js"; export * from "./materials/nodes/NodeMaterials.js"; +export type { default as Backend } from "./renderers/common/Backend.js"; export { default as BundleGroup } from "./renderers/common/BundleGroup.js"; export { default as PMREMGenerator } from "./renderers/common/extras/PMREMGenerator.js"; export { default as Lighting } from "./renderers/common/Lighting.js"; export { default as PostProcessing } from "./renderers/common/PostProcessing.js"; export { default as QuadMesh } from "./renderers/common/QuadMesh.js"; +export { default as ReadbackBuffer } from "./renderers/common/ReadbackBuffer.js"; export type { default as Renderer } from "./renderers/common/Renderer.js"; export { default as RenderPipeline } from "./renderers/common/RenderPipeline.js"; +export { default as WebGLBackend } from "./renderers/webgl-fallback/WebGLBackend.js"; +export { default as WebGPUBackend } from "./renderers/webgpu/WebGPUBackend.js"; export { default as WebGPURenderer } from "./renderers/webgpu/WebGPURenderer.Nodes.js"; import * as RendererUtils from "./renderers/common/RendererUtils.js"; export { RendererUtils }; @@ -17,13 +21,13 @@ export { default as NodeLoader } from "./loaders/nodes/NodeLoader.js"; export { default as NodeMaterialLoader } from "./loaders/nodes/NodeMaterialLoader.js"; export { default as NodeObjectLoader } from "./loaders/nodes/NodeObjectLoader.js"; export * from "./nodes/Nodes.js"; +export { ClippingGroup } from "./objects/ClippingGroup.js"; export { default as BlendMode } from "./renderers/common/BlendMode.js"; export { default as CanvasTarget } from "./renderers/common/CanvasTarget.js"; -export { default as InspectorBase } from "./renderers/common/InspectorBase.js"; -import * as TSL from "./nodes/TSL.js"; -export { TSL }; -export { ClippingGroup } from "./objects/ClippingGroup.js"; export { default as IndirectStorageBufferAttribute } from "./renderers/common/IndirectStorageBufferAttribute.js"; +export { default as InspectorBase, type InspectorBaseEventMap } from "./renderers/common/InspectorBase.js"; export { default as StorageBufferAttribute } from "./renderers/common/StorageBufferAttribute.js"; export { default as StorageInstancedBufferAttribute } from "./renderers/common/StorageInstancedBufferAttribute.js"; export { default as StorageTexture } from "./renderers/common/StorageTexture.js"; +import * as TSL from "./nodes/TSL.js"; +export { TSL }; diff --git a/types/three/src/Three.WebGPU.d.ts b/types/three/src/Three.WebGPU.d.ts index 01dda72539d092..9dad07692baaf7 100644 --- a/types/three/src/Three.WebGPU.d.ts +++ b/types/three/src/Three.WebGPU.d.ts @@ -1,13 +1,18 @@ export * from "./Three.Core.js"; export * from "./materials/nodes/NodeMaterials.js"; +export type { default as Backend } from "./renderers/common/Backend.js"; export { default as BundleGroup } from "./renderers/common/BundleGroup.js"; export { default as PMREMGenerator } from "./renderers/common/extras/PMREMGenerator.js"; export { default as Lighting } from "./renderers/common/Lighting.js"; export { default as PostProcessing } from "./renderers/common/PostProcessing.js"; export { default as QuadMesh } from "./renderers/common/QuadMesh.js"; +export { default as ReadbackBuffer } from "./renderers/common/ReadbackBuffer.js"; export type { default as Renderer } from "./renderers/common/Renderer.js"; export { default as RenderPipeline } from "./renderers/common/RenderPipeline.js"; +export { default as WebGLCapabilities } from "./renderers/webgl-fallback/utils/WebGLCapabilities.js"; +export { default as WebGLBackend } from "./renderers/webgl-fallback/WebGLBackend.js"; +export { default as WebGPUBackend } from "./renderers/webgpu/WebGPUBackend.js"; export { default as WebGPURenderer } from "./renderers/webgpu/WebGPURenderer.js"; import * as RendererUtils from "./renderers/common/RendererUtils.js"; export { RendererUtils }; @@ -17,16 +22,18 @@ export { default as NodeLoader } from "./loaders/nodes/NodeLoader.js"; export { default as NodeMaterialLoader } from "./loaders/nodes/NodeMaterialLoader.js"; export { default as NodeObjectLoader } from "./loaders/nodes/NodeObjectLoader.js"; export * from "./nodes/Nodes.js"; +export { ClippingGroup } from "./objects/ClippingGroup.js"; export { default as BlendMode } from "./renderers/common/BlendMode.js"; export { default as CanvasTarget } from "./renderers/common/CanvasTarget.js"; export { default as CubeRenderTarget } from "./renderers/common/CubeRenderTarget.js"; -export { default as InspectorBase } from "./renderers/common/InspectorBase.js"; -import * as TSL from "./nodes/TSL.js"; -export { TSL }; -export { ClippingGroup } from "./objects/ClippingGroup.js"; export { default as IndirectStorageBufferAttribute } from "./renderers/common/IndirectStorageBufferAttribute.js"; +export { default as InspectorBase, type InspectorBaseEventMap } from "./renderers/common/InspectorBase.js"; export { default as Storage3DTexture } from "./renderers/common/Storage3DTexture.js"; export { default as StorageArrayTexture } from "./renderers/common/StorageArrayTexture.js"; export { default as StorageBufferAttribute } from "./renderers/common/StorageBufferAttribute.js"; export { default as StorageInstancedBufferAttribute } from "./renderers/common/StorageInstancedBufferAttribute.js"; export { default as StorageTexture } from "./renderers/common/StorageTexture.js"; +export { default as GLSLNodeBuilder } from "./renderers/webgl-fallback/nodes/GLSLNodeBuilder.js"; +export { default as BasicNodeLibrary } from "./renderers/webgpu/nodes/BasicNodeLibrary.js"; +import * as TSL from "./nodes/TSL.js"; +export { TSL }; diff --git a/types/three/src/Three.d.ts b/types/three/src/Three.d.ts index 63c81747080620..5c4c3b323d0299 100644 --- a/types/three/src/Three.d.ts +++ b/types/three/src/Three.d.ts @@ -38,17 +38,6 @@ export type { WebGLUniforms } from "./renderers/webgl/WebGLUniforms.js"; export * from "./renderers/webgl/WebGLUtils.js"; export * from "./renderers/WebGLCubeRenderTarget.js"; export * from "./renderers/WebGLRenderer.js"; -export type { - WebXRController, - WebXRSpaceEventMap, - XRControllerEventType, - XRGripSpace, - XRHandInputState, - XRHandJoints, - XRHandSpace, - XRJointSpace, - XRTargetRaySpace, -} from "./renderers/webxr/WebXRController.js"; export type { WebXRDepthSensing } from "./renderers/webxr/WebXRDepthSensing.js"; export type { WebXRArrayCamera, diff --git a/types/three/src/animation/AnimationMixer.d.ts b/types/three/src/animation/AnimationMixer.d.ts index 6c1a8316203411..2268a714d9054b 100644 --- a/types/three/src/animation/AnimationMixer.d.ts +++ b/types/three/src/animation/AnimationMixer.d.ts @@ -36,7 +36,9 @@ export interface AnimationMixerStats { * the scene. When multiple objects in the scene are animated independently, * one `AnimationMixer` may be used for each object. */ -export class AnimationMixer extends EventDispatcher { +export class AnimationMixer + extends EventDispatcher +{ /** * Constructs a new animation mixer. * diff --git a/types/three/src/audio/AudioContext.d.ts b/types/three/src/audio/AudioContext.d.ts index 32fe4f168516ab..cc9377570a8484 100644 --- a/types/three/src/audio/AudioContext.d.ts +++ b/types/three/src/audio/AudioContext.d.ts @@ -7,13 +7,13 @@ export class AudioContext { /** * Returns the global native audio context. * - * @return {AudioContext} The native audio context. + * @return {Window.AudioContext} The native audio context. */ static getContext(): AudioContext; /** * Allows to set the global native audio context from outside. * - * @param {AudioContext} value - The native context to set. + * @param {Window.AudioContext} value - The native context to set. */ static setContext(value: AudioContext): void; } diff --git a/types/three/src/core/BufferAttribute.d.ts b/types/three/src/core/BufferAttribute.d.ts index 72805ea1b323b0..d87c4fbe75bf7d 100644 --- a/types/three/src/core/BufferAttribute.d.ts +++ b/types/three/src/core/BufferAttribute.d.ts @@ -1,6 +1,7 @@ import { AttributeGPUType, Usage } from "../constants.js"; import { Matrix3 } from "../math/Matrix3.js"; import { Matrix4 } from "../math/Matrix4.js"; +import { EventDispatcher } from "./EventDispatcher.js"; export type TypedArray = | Int8Array @@ -34,6 +35,10 @@ export interface BufferAttributeJSON { usage?: Usage; } +export interface BufferAttributeEventMap { + dispose: {}; +} + /** * This class stores data for an attribute (such as vertex positions, face indices, normals, colors, UVs, and any custom attributes ) * associated with a {@link THREE.BufferGeometry | BufferGeometry}, which allows for more efficient passing of data to the GPU @@ -48,7 +53,9 @@ export interface BufferAttributeJSON { * @see {@link https://threejs.org/docs/index.html#api/en/core/BufferAttribute | Official Documentation} * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js | Source} */ -export class BufferAttribute { +export class BufferAttribute + extends EventDispatcher +{ /** * This creates a new {@link THREE.GLBufferAttribute | GLBufferAttribute} object. * @param array Must be a `TypedArray`. Used to instantiate the buffer. @@ -348,6 +355,11 @@ export class BufferAttribute { * Convert this object to three.js to the `data.attributes` part of {@link https://github.com/mrdoob/three.js/wiki/JSON-Geometry-format-4 | JSON Geometry format v4}, */ toJSON(): BufferAttributeJSON; + + /** + * Disposes of the buffer attribute. Available only in {@link WebGPURenderer}. + */ + dispose(): void; } /** diff --git a/types/three/src/core/RenderTarget.d.ts b/types/three/src/core/RenderTarget.d.ts index 0c5576865780a3..075f08a84b8b7b 100644 --- a/types/three/src/core/RenderTarget.d.ts +++ b/types/three/src/core/RenderTarget.d.ts @@ -19,7 +19,14 @@ export interface RenderTargetOptions extends TextureParameters { multiview?: boolean | undefined; } -export class RenderTarget extends EventDispatcher<{ dispose: {} }> { +export interface RenderTargetEventMap { + dispose: {}; +} + +export class RenderTarget< + TTexture extends Texture | Texture[] = Texture, + TEventMap extends RenderTargetEventMap = RenderTargetEventMap, +> extends EventDispatcher { readonly isRenderTarget: true; width: number; diff --git a/types/three/src/core/UniformsGroup.d.ts b/types/three/src/core/UniformsGroup.d.ts index 4fb30b2c1726a1..7e6b6c3543eb05 100644 --- a/types/three/src/core/UniformsGroup.d.ts +++ b/types/three/src/core/UniformsGroup.d.ts @@ -2,11 +2,17 @@ import { Usage } from "../constants.js"; import { EventDispatcher } from "./EventDispatcher.js"; import { Uniform } from "./Uniform.js"; +export interface UniformsGroupEventMap { + dispose: {}; +} + /** * @see Example: {@link https://threejs.org/examples/#webgl2_ubo | WebGL2 / UBO} * @see {@link https://github.com/mrdoob/three.js/blob/master/src/core/UniformsGroup.js | Source} */ -export class UniformsGroup extends EventDispatcher<{ dispose: {} }> { +export class UniformsGroup + extends EventDispatcher +{ constructor(); readonly isUniformsGroup: true; diff --git a/types/three/src/extras/Controls.d.ts b/types/three/src/extras/Controls.d.ts index 2801587285d484..c80f0f4cf02c8a 100644 --- a/types/three/src/extras/Controls.d.ts +++ b/types/three/src/extras/Controls.d.ts @@ -1,10 +1,14 @@ import { EventDispatcher } from "../core/EventDispatcher.js"; import { Object3D } from "../core/Object3D.js"; +export interface ControlsEventMap {} + /** * Abstract base class for controls. */ -declare abstract class Controls extends EventDispatcher { +declare abstract class Controls + extends EventDispatcher +{ /** * The 3D object that is managed by the controls. */ diff --git a/types/three/src/geometries/ExtrudeGeometry.d.ts b/types/three/src/geometries/ExtrudeGeometry.d.ts index d872b7c2167276..eba885f8c6afc1 100644 --- a/types/three/src/geometries/ExtrudeGeometry.d.ts +++ b/types/three/src/geometries/ExtrudeGeometry.d.ts @@ -7,65 +7,60 @@ import { Vector3 } from "../math/Vector3.js"; export interface ExtrudeGeometryOptions { /** * Number of points on the curves. - * Expects a `Integer`. - * @defaultValue `12` + * @default 12 */ curveSegments?: number | undefined; /** * Number of points used for subdividing segments along the depth of the extruded spline. - * @defaultValue `1` + * @default 1 */ steps?: number | undefined; /** * Depth to extrude the shape. - * @defaultValue `1` + * @default 1 */ depth?: number | undefined; /** - * Turn on bevel. Applying beveling to the shape. - * @defaultValue `true` + * Whether to beveling to the shape or not. + * @default true */ bevelEnabled?: boolean | undefined; /** * How deep into the original shape the bevel goes. - * Expects a `Float`. - * @defaultValue `0.2` + * @default 0.2 */ bevelThickness?: number | undefined; /** - * Distance from the shape outline that the bevel extends - * Expects a `Float`. - * @defaultValue `bevelThickness - 0.1` + * Distance from the shape outline that the bevel extends. + * @default bevelThickness-0.1 */ bevelSize?: number | undefined; /** * Distance from the shape outline that the bevel starts. - * Expects a `Float`. - * @defaultValue `0` + * @default 0 */ bevelOffset?: number | undefined; /** - * Number of bevel layers/segments. - * Expects a `Integer`. - * @defaultValue `3` + * Number of bevel layers. + * @default 3 */ bevelSegments?: number | undefined; /** - * A 3D spline path along which the shape should be extruded. - * @remarks Bevels not supported for path extrusion. + * A 3D spline path along which the shape should be extruded. Bevels not supported for path extrusion. + * @default undefined */ extrudePath?: Curve | undefined; /** - * A object that provides UV generator functions. + * An object that provides UV generator functions for custom UV generation. */ UVGenerator?: UVGenerator | undefined; } @@ -90,38 +85,27 @@ export interface UVGenerator { /** * Creates extruded geometry from a path shape. - * @remarks This object extrudes a 2D shape to a 3D geometry. - * @remarks When creating a Mesh with this geometry, if you'd like to have a separate material used for its face and its extruded sides, you can use an array of materials - * @remarks The first material will be applied to the face; the second material will be applied to the sides. - * @example - * ```typescript + * + * ```js * const length = 12, width = 8; + * * const shape = new THREE.Shape(); - * shape.moveTo(0, 0); - * shape.lineTo(0, width); - * shape.lineTo(length, width); - * shape.lineTo(length, 0); - * shape.lineTo(0, 0); - * const extrudeSettings = { - * steps: 2, - * depth: 16, - * bevelEnabled: true, - * bevelThickness: 1, - * bevelSize: 1, - * bevelOffset: 0, - * bevelSegments: 1 - * }; - * const geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings); - * const material = new THREE.MeshBasicMaterial({ - * color: 0x00ff00 - * }); - * const mesh = new THREE.Mesh(geometry, material); - * scene.add(mesh); + * shape.moveTo( 0,0 ); + * shape.lineTo( 0, width ); + * shape.lineTo( length, width ); + * shape.lineTo( length, 0 ); + * shape.lineTo( 0, 0 ); + * + * const geometry = new THREE.ExtrudeGeometry( shape ); + * const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); + * const mesh = new THREE.Mesh( geometry, material ) ; + * scene.add( mesh ); * ``` - * @see {@link https://threejs.org/docs/index.html#api/en/geometries/ExtrudeGeometry | Official Documentation} - * @see {@link https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js | Source} + * + * @augments BufferGeometry + * @demo scenes/geometry-browser.html#ExtrudeGeometry */ -export class ExtrudeGeometry extends BufferGeometry { +declare class ExtrudeGeometry extends BufferGeometry { /** * Create a new instance of {@link ExtrudeGeometry} * @param shapes Shape or an array of shapes. Default `new Shape([new Vector2(0.5, 0.5), new Vector2(-0.5, 0.5), new Vector2(-0.5, -0.5), new Vector2(0.5, -0.5)])`. @@ -137,16 +121,18 @@ export class ExtrudeGeometry extends BufferGeometry { override readonly type: string | "ExtrudeGeometry"; /** - * An object with a property for each of the constructor parameters. - * @remarks Any modification after instantiation does not change the geometry. + * Holds the constructor parameters that have been + * used to generate the geometry. Any modification + * after instantiation does not change the geometry. + * + * @type {Object} */ readonly parameters: { readonly shapes: Shape | Shape[]; readonly options: ExtrudeGeometryOptions; }; - addShape(shape: Shape): void; - - /** @internal */ - static fromJSON(data: {}, shapes: unknown): ExtrudeGeometry; + copy(source: ExtrudeGeometry): this; } + +export { ExtrudeGeometry }; diff --git a/types/three/src/loaders/FileLoader.d.ts b/types/three/src/loaders/FileLoader.d.ts index f9b80c27fdf201..4c9640d8589b30 100644 --- a/types/three/src/loaders/FileLoader.d.ts +++ b/types/three/src/loaders/FileLoader.d.ts @@ -1,12 +1,12 @@ import { Loader } from "./Loader.js"; import { LoadingManager } from "./LoadingManager.js"; -export class FileLoader extends Loader { +export class FileLoader extends Loader { constructor(manager?: LoadingManager); load( url: string, - onLoad?: (data: string | ArrayBuffer) => void, + onLoad?: (data: TData) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void, ): void; diff --git a/types/three/src/materials/Material.d.ts b/types/three/src/materials/Material.d.ts index bf057da6708d87..67ee2cbe3d8f47 100644 --- a/types/three/src/materials/Material.d.ts +++ b/types/three/src/materials/Material.d.ts @@ -519,6 +519,10 @@ export interface MaterialJSON { images?: SourceJSON[]; } +export interface MaterialEventMap { + dispose: {}; +} + /** * Abstract base class for materials. * @@ -526,7 +530,7 @@ export interface MaterialJSON { * * @abstract */ -export class Material extends EventDispatcher<{ dispose: {} }> { +export class Material extends EventDispatcher { /** * This flag can be used for type testing. * diff --git a/types/three/src/materials/MeshToonMaterial.d.ts b/types/three/src/materials/MeshToonMaterial.d.ts index e7d42f7d7d1a99..7e70be5c3197cd 100644 --- a/types/three/src/materials/MeshToonMaterial.d.ts +++ b/types/three/src/materials/MeshToonMaterial.d.ts @@ -21,7 +21,7 @@ export interface MeshToonMaterialProperties extends MaterialProperties { map: Texture | null; /** * Gradient map for toon shading. It's required to set - * {@link Texture#minFilter} and {@link Texture#magFilter} to {@linkNearestFilter} + * {@link Texture#minFilter} and {@link Texture#magFilter} to {@link NearestFilter} * when using this type of texture. * * @default null diff --git a/types/three/src/materials/nodes/Line2NodeMaterial.d.ts b/types/three/src/materials/nodes/Line2NodeMaterial.d.ts index 1766a71e30e24c..443dc719c10784 100644 --- a/types/three/src/materials/nodes/Line2NodeMaterial.d.ts +++ b/types/three/src/materials/nodes/Line2NodeMaterial.d.ts @@ -82,6 +82,13 @@ declare class Line2NodeMaterial extends NodeMaterial { */ readonly isLine2NodeMaterial: boolean; setValues(values?: Line2NodeMaterialParameters): void; + /** + * Copies the properties of the given material to this instance. + * + * @param {Line2NodeMaterial} source - The material to copy. + * @return {Line2NodeMaterial} A reference to this material. + */ + copy(source: Line2NodeMaterial): this; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/types/three/src/materials/nodes/VolumeNodeMaterial.d.ts b/types/three/src/materials/nodes/VolumeNodeMaterial.d.ts index b60b252b19eb94..6491c8051cf52e 100644 --- a/types/three/src/materials/nodes/VolumeNodeMaterial.d.ts +++ b/types/three/src/materials/nodes/VolumeNodeMaterial.d.ts @@ -22,7 +22,7 @@ export interface VolumeNodeMaterialNodeProperties extends NodeMaterialNodeProper * * @default null */ - scatteringNode: (params: { positionRay: Node }) => Node | null; + scatteringNode: (params: { positionRay: Node<"vec3"> }) => Node | null; } // eslint-disable-next-line @typescript-eslint/no-empty-interface diff --git a/types/three/src/materials/nodes/manager/NodeMaterialObserver.d.ts b/types/three/src/materials/nodes/manager/NodeMaterialObserver.d.ts index c58e0df704716a..1d8ce8a058d45c 100644 --- a/types/three/src/materials/nodes/manager/NodeMaterialObserver.d.ts +++ b/types/three/src/materials/nodes/manager/NodeMaterialObserver.d.ts @@ -1,4 +1,5 @@ import { BufferAttribute } from "../../../core/BufferAttribute.js"; +import { BufferGeometry } from "../../../core/BufferGeometry.js"; import { Light } from "../../../lights/Light.js"; import NodeBuilder from "../../../nodes/core/NodeBuilder.js"; import NodeFrame from "../../../nodes/core/NodeFrame.js"; @@ -88,6 +89,14 @@ declare class NodeMaterialObserver { * @return {boolean} Whether the node builder's material uses node properties or not. */ containsNode(builder: NodeBuilder): boolean; + /** + * Returns a geometry data structure holding the geometry property values for + * monitoring. + * + * @param {BufferGeometry} geometry - The geometry. + * @return {Object} An object for monitoring geometry properties. + */ + getGeometryData(geometry: BufferGeometry): unknown; /** * Returns a material data structure holding the material property values for * monitoring. @@ -101,9 +110,10 @@ declare class NodeMaterialObserver { * * @param {RenderObject} renderObject - The render object. * @param {Array} lightsData - The current material lights. + * @param {number} renderId - The current render ID. * @return {boolean} Whether the given render object has changed its state or not. */ - equals(renderObject: RenderObject, lightsData: Light[]): boolean; + equals(renderObject: RenderObject, lightsData: Light[], renderId: number): boolean; /** * Returns the lights data for the given material lights. * diff --git a/types/three/src/math/ColorManagement.d.ts b/types/three/src/math/ColorManagement.d.ts index 308c54495547b5..2e3a671e6071e7 100644 --- a/types/three/src/math/ColorManagement.d.ts +++ b/types/three/src/math/ColorManagement.d.ts @@ -37,7 +37,7 @@ export interface ColorManagement { getTransfer: (colorSpace: string) => ColorSpaceTransfer; - getLuminanceCoefficients: (target: Vector3, colorSpace?: string) => [number, number, number]; + getLuminanceCoefficients: (target: Vector3, colorSpace?: string) => Vector3; define: (colorSpaces: Record) => void; diff --git a/types/three/src/math/Matrix2.d.ts b/types/three/src/math/Matrix2.d.ts index 40ed4c8aac3456..93947447d7c9b1 100644 --- a/types/three/src/math/Matrix2.d.ts +++ b/types/three/src/math/Matrix2.d.ts @@ -12,7 +12,7 @@ export type Matrix2Tuple = [ * const m = new Matrix2(); */ export class Matrix2 { - readonly isMatrix2: true; + static readonly isMatrix2: boolean; /** * A {@link https://en.wikipedia.org/wiki/Row-_and_column-major_order column-major} list of matrix values. diff --git a/types/three/src/math/Matrix3.d.ts b/types/three/src/math/Matrix3.d.ts index 0b593fcb81193f..2b601198a100cf 100644 --- a/types/three/src/math/Matrix3.d.ts +++ b/types/three/src/math/Matrix3.d.ts @@ -17,7 +17,7 @@ export type Matrix3Tuple = [ ]; export class Matrix3 { - readonly isMatrix3: true; + static readonly isMatrix3: boolean; /** * Array with matrix values. diff --git a/types/three/src/math/Matrix4.d.ts b/types/three/src/math/Matrix4.d.ts index 458d7e4d7b2d36..e624acdf507461 100644 --- a/types/three/src/math/Matrix4.d.ts +++ b/types/three/src/math/Matrix4.d.ts @@ -42,7 +42,7 @@ export type Matrix4Tuple = [ * m.multiply( m3 ); */ export class Matrix4 { - readonly isMatrix4: true; + static readonly isMatrix4: boolean; /** * Array with matrix values. diff --git a/types/three/src/math/Plane.d.ts b/types/three/src/math/Plane.d.ts index 59fa239123ae51..65c0e349669869 100644 --- a/types/three/src/math/Plane.d.ts +++ b/types/three/src/math/Plane.d.ts @@ -31,7 +31,7 @@ export class Plane { distanceToPoint(point: Vector3): number; distanceToSphere(sphere: Sphere): number; projectPoint(point: Vector3, target: Vector3): Vector3; - intersectLine(line: Line3, target: Vector3): Vector3 | null; + intersectLine(line: Line3, target: Vector3, clampToLine?: boolean): Vector3 | null; intersectsLine(line: Line3): boolean; intersectsBox(box: Box3): boolean; intersectsSphere(sphere: Sphere): boolean; diff --git a/types/three/src/math/Vector2.d.ts b/types/three/src/math/Vector2.d.ts index fd2a84a1d7c756..7ca5092b85ae95 100644 --- a/types/three/src/math/Vector2.d.ts +++ b/types/three/src/math/Vector2.d.ts @@ -12,6 +12,8 @@ export interface Vector2Like { * 2D vector. */ export class Vector2 { + static readonly isVector2: boolean; + constructor(x?: number, y?: number); /** @@ -25,7 +27,6 @@ export class Vector2 { y: number; width: number; height: number; - readonly isVector2: true; /** * Sets value of this vector. diff --git a/types/three/src/math/Vector3.d.ts b/types/three/src/math/Vector3.d.ts index 43dc5629b55127..6c77a30a167ffc 100644 --- a/types/three/src/math/Vector3.d.ts +++ b/types/three/src/math/Vector3.d.ts @@ -29,6 +29,8 @@ export interface Vector3Like { * c.crossVectors( a, b ); */ export class Vector3 { + static readonly isVector3: boolean; + constructor(x?: number, y?: number, z?: number); /** @@ -45,7 +47,6 @@ export class Vector3 { * @default 0 */ z: number; - readonly isVector3: true; /** * Sets value of this vector. diff --git a/types/three/src/math/Vector4.d.ts b/types/three/src/math/Vector4.d.ts index 2e0813d26aecde..d04e34630b1859 100644 --- a/types/three/src/math/Vector4.d.ts +++ b/types/three/src/math/Vector4.d.ts @@ -15,6 +15,8 @@ export interface Vector4Like { * 4D vector. */ export class Vector4 { + static readonly isVector4: boolean; + constructor(x?: number, y?: number, z?: number, w?: number); /** @@ -39,7 +41,6 @@ export class Vector4 { width: number; height: number; - readonly isVector4: true; /** * Sets value of this vector. diff --git a/types/three/src/nodes/Nodes.d.ts b/types/three/src/nodes/Nodes.d.ts index 544fe185fe452f..a03534360e492d 100644 --- a/types/three/src/nodes/Nodes.d.ts +++ b/types/three/src/nodes/Nodes.d.ts @@ -165,7 +165,6 @@ export { default as LoopNode } from "./utils/LoopNode.js"; export { default as MaxMipLevelNode } from "./utils/MaxMipLevelNode.js"; export { default as MemberNode } from "./utils/MemberNode.js"; export { default as ReflectorNode, ReflectorNodeParameters } from "./utils/ReflectorNode.js"; -export { default as RemapNode } from "./utils/RemapNode.js"; export { default as RotateNode } from "./utils/RotateNode.js"; export { default as RTTNode, RTTNodeOptions } from "./utils/RTTNode.js"; export { default as SampleNode } from "./utils/SampleNode.js"; diff --git a/types/three/src/nodes/TSL.d.ts b/types/three/src/nodes/TSL.d.ts index 2e1ea0f18d25b3..e14e0ea22ae487 100644 --- a/types/three/src/nodes/TSL.d.ts +++ b/types/three/src/nodes/TSL.d.ts @@ -38,7 +38,7 @@ export * from "./utils/Oscillators.js"; export * from "./utils/Packing.js"; export * from "./utils/PostProcessingUtils.js"; export * from "./utils/ReflectorNode.js"; -export * from "./utils/RemapNode.js"; +export * from "./utils/Remap.js"; export * from "./utils/RotateNode.js"; export * from "./utils/RTTNode.js"; export * from "./utils/SampleNode.js"; diff --git a/types/three/src/nodes/accessors/BufferAttributeNode.d.ts b/types/three/src/nodes/accessors/BufferAttributeNode.d.ts index 975f7c057b9b30..389b24a0952dd8 100644 --- a/types/three/src/nodes/accessors/BufferAttributeNode.d.ts +++ b/types/three/src/nodes/accessors/BufferAttributeNode.d.ts @@ -109,7 +109,7 @@ declare class BufferAttributeNodeClass extends InputNode { +declare class NodeClass extends EventDispatcher { static get type(): string; /** * Constructs a new node. @@ -111,13 +115,6 @@ declare class NodeClass extends EventDispatcher<{ dispose: {} }> { * @default 'none' */ updateAfterType: NodeUpdateType; - /** - * The UUID of the node. - * - * @type {string} - * @readonly - */ - readonly uuid: string; /** * The version of the node. The version automatically is increased when {@link Node#needsUpdate} is set to `true`. * @@ -165,6 +162,14 @@ declare class NodeClass extends EventDispatcher<{ dispose: {} }> { * @default null */ private _cacheKey; + /** + * The UUID of the node. + * + * @type {string} + * @default null + * @private + */ + private _uuid; /** * The cache key's version. * @@ -173,6 +178,13 @@ declare class NodeClass extends EventDispatcher<{ dispose: {} }> { * @default 0 */ private _cacheKeyVersion; + /** + * The unique ID of the node. + * + * @type {number} + * @readonly + */ + readonly id: number; /** * The stack trace of the node for debugging purposes. * @@ -188,6 +200,13 @@ declare class NodeClass extends EventDispatcher<{ dispose: {} }> { * @param {boolean} value */ set needsUpdate(value: boolean); + /** + * The UUID of the node. + * + * @type {string} + * @readonly + */ + get uuid(): string; /** * The type of the class. The value is usually the constructor name. * @@ -354,9 +373,18 @@ declare class NodeClass extends EventDispatcher<{ dispose: {} }> { * Returns the node's type. * * @param {NodeBuilder} builder - The current node builder. + * @param {string} [output=null] - The output of the node. + * @return {string} The type of the node. + */ + getNodeType(builder: NodeBuilder, output?: string): string; + /** + * Returns the node's type. + * + * @param {NodeBuilder} builder - The current node builder. + * @param {string} [output=null] - The output of the node. * @return {string} The type of the node. */ - getNodeType(builder: NodeBuilder): string; + generateNodeType(builder: NodeBuilder, output?: string): string; /** * This method is used during the build process of a node and ensures * equal nodes are not built multiple times but just once. For example if diff --git a/types/three/src/nodes/core/StackNode.d.ts b/types/three/src/nodes/core/StackNode.d.ts index 52f31da83735ce..87754e7e58f65b 100644 --- a/types/three/src/nodes/core/StackNode.d.ts +++ b/types/three/src/nodes/core/StackNode.d.ts @@ -15,7 +15,7 @@ declare class StackNode extends Node { Switch(expression: Node): this; - Case(...params: Node[]): this; + Case(...params: [...Node[], () => void]): this; Default(method: () => void): this; } diff --git a/types/three/src/nodes/core/StructTypeNode.d.ts b/types/three/src/nodes/core/StructTypeNode.d.ts index 460b97d726360d..ba42ffabbf7bb5 100644 --- a/types/three/src/nodes/core/StructTypeNode.d.ts +++ b/types/three/src/nodes/core/StructTypeNode.d.ts @@ -51,10 +51,6 @@ declare class StructTypeNode extends Node { * @returns {number} The length of the struct. */ getLength(): number; - getMemberType(builder: NodeBuilder, name: string): string; - getNodeType(builder: NodeBuilder): string; - setup(builder: NodeBuilder): undefined; - generate(builder: NodeBuilder): string; } export default StructTypeNode; diff --git a/types/three/src/nodes/core/UniformGroupNode.d.ts b/types/three/src/nodes/core/UniformGroupNode.d.ts index de80f2a4c7606f..b0e430116695bd 100644 --- a/types/three/src/nodes/core/UniformGroupNode.d.ts +++ b/types/three/src/nodes/core/UniformGroupNode.d.ts @@ -1,3 +1,4 @@ +import { NodeUpdateType } from "./constants.js"; import Node from "./Node.js"; export default class UniformGroupNode extends Node { @@ -8,13 +9,13 @@ export default class UniformGroupNode extends Node { readonly isUniformGroup: true; - constructor(name: string, shared?: boolean); + constructor(name: string, shared?: boolean, order?: number, updateType?: NodeUpdateType | null); set needsUpdate(value: boolean); } -export const uniformGroup: (name: string) => UniformGroupNode; -export const sharedUniformGroup: (name: string) => UniformGroupNode; +export const uniformGroup: (name: string, order?: number, updateType?: NodeUpdateType | null) => UniformGroupNode; +export const sharedUniformGroup: (name: string, order?: number, updateType?: NodeUpdateType | null) => UniformGroupNode; export const frameGroup: UniformGroupNode; export const renderGroup: UniformGroupNode; diff --git a/types/three/src/nodes/core/UniformNode.d.ts b/types/three/src/nodes/core/UniformNode.d.ts index 9614789f574a89..a4886ff4de4c4b 100644 --- a/types/three/src/nodes/core/UniformNode.d.ts +++ b/types/three/src/nodes/core/UniformNode.d.ts @@ -6,10 +6,12 @@ import { Vector2 } from "../../math/Vector2.js"; import { Vector3 } from "../../math/Vector3.js"; import { Vector4 } from "../../math/Vector4.js"; import { NodeUpdateType } from "./constants.js"; +import ConstNode from "./ConstNode.js"; import InputNode from "./InputNode.js"; import NodeBuilder from "./NodeBuilder.js"; import NodeFrame from "./NodeFrame.js"; import UniformGroupNode from "./UniformGroupNode.js"; +import VarNode from "./VarNode.js"; /** * Class for representing a uniform. @@ -99,6 +101,7 @@ interface Uniform { (value: Matrix4): UniformNode<"mat4", Matrix4>; (value: Color): UniformNode<"color", Color>; (value: InputNode): UniformNode; + (value: VarNode>): UniformNode; } /** diff --git a/types/three/src/nodes/core/VarNode.d.ts b/types/three/src/nodes/core/VarNode.d.ts index c676eeeaf6b230..0e7e9ac869e1b8 100644 --- a/types/three/src/nodes/core/VarNode.d.ts +++ b/types/three/src/nodes/core/VarNode.d.ts @@ -1,7 +1,7 @@ import Node from "./Node.js"; -interface VarNodeInterface { - node: Node; +interface VarNodeInterface { + node: TNode; name: string | null; readonly isVarNode: true; @@ -15,25 +15,31 @@ interface VarNodeInterface { } declare const VarNode: { - new(node: Node, name?: string | null, readOnly?: boolean): VarNode; + new(node: TNode, name?: string | null, readOnly?: boolean): VarNode; }; -type VarNode = Node & VarNodeInterface; +type VarNode = Node & VarNodeInterface; export default VarNode; -export const Var: (node: Node, name?: string | null) => VarNode; +export const Var: >( + node: TNode, + name?: string | null, +) => VarNode; -export const Const: (node: Node, name?: string | null) => VarNode; +export const Const: >( + node: TNode, + name?: string | null, +) => VarNode; -export const VarIntent: (node: Node) => Node; +export const VarIntent: >(node: TNode) => VarNode; declare module "./Node.js" { interface NodeExtensions { - toVar: (name?: string | null) => VarNode; + toVar: (name?: string | null) => VarNode; - toConst: (name?: string | null) => VarNode; + toConst: (name?: string | null) => VarNode; - toVarIntent: () => Node; + toVarIntent: () => VarNode; } } diff --git a/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts b/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts index 87d2b7eaaf69c1..11137816247e70 100644 --- a/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts +++ b/types/three/src/nodes/display/ViewportDepthTextureNode.d.ts @@ -3,9 +3,7 @@ import Node from "../core/Node.js"; import ViewportTextureNode from "./ViewportTextureNode.js"; declare class ViewportDepthTextureNode extends ViewportTextureNode { - constructor(uvNode?: Node, levelNode?: Node | null); - - getTextureForReference(): DepthTexture; + constructor(uvNode?: Node, levelNode?: Node | null, depthTexture?: DepthTexture | null); } export default ViewportDepthTextureNode; diff --git a/types/three/src/nodes/display/ViewportTextureNode.d.ts b/types/three/src/nodes/display/ViewportTextureNode.d.ts index 74a35a228ad664..ad717eaba3cf6d 100644 --- a/types/three/src/nodes/display/ViewportTextureNode.d.ts +++ b/types/three/src/nodes/display/ViewportTextureNode.d.ts @@ -1,5 +1,5 @@ import { RenderTarget } from "../../core/RenderTarget.js"; -import { FramebufferTexture } from "../../textures/FramebufferTexture.js"; +import CanvasTarget from "../../renderers/common/CanvasTarget.js"; import { Texture } from "../../textures/Texture.js"; import TextureNode from "../accessors/TextureNode.js"; import { NodeUpdateType } from "../core/constants.js"; @@ -12,9 +12,9 @@ declare class ViewportTextureNode extends TextureNode { updateBeforeType: NodeUpdateType; - constructor(uvNode?: Node, levelNode?: Node | null, framebufferTexture?: FramebufferTexture | null); + constructor(uvNode?: Node, levelNode?: Node | null, framebufferTexture?: Texture | null); - getTextureForReference(reference?: RenderTarget | null): Texture; + getTextureForReference(reference?: RenderTarget | CanvasTarget | null): Texture; } export default ViewportTextureNode; @@ -22,12 +22,12 @@ export default ViewportTextureNode; export const viewportTexture: ( uvNode?: Node, levelNode?: Node | null, - framebufferTexture?: FramebufferTexture | null, + framebufferTexture?: Texture | null, ) => ViewportTextureNode; export const viewportMipTexture: ( uvNode?: Node, levelNode?: Node | null, - framebufferTexture?: FramebufferTexture | null, + framebufferTexture?: Texture | null, ) => Node; export const viewportOpaqueMipTexture: (uv?: Node, level?: Node | null) => Node; diff --git a/types/three/src/nodes/functions/ShadowMaskModel.d.ts b/types/three/src/nodes/functions/ShadowMaskModel.d.ts index 80440ad8ae75f4..762176cf1b2e01 100644 --- a/types/three/src/nodes/functions/ShadowMaskModel.d.ts +++ b/types/three/src/nodes/functions/ShadowMaskModel.d.ts @@ -1,8 +1,8 @@ import LightingModel from "../core/LightingModel.js"; -import VarNode from "../core/VarNode.js"; +import Node from "../core/Node.js"; export default class ShadowMaskModel extends LightingModel { - shadowNode: VarNode; + shadowNode: Node; constructor(); } diff --git a/types/three/src/nodes/gpgpu/BarrierNode.d.ts b/types/three/src/nodes/gpgpu/BarrierNode.d.ts index 7323ed72e343eb..24978ee4b1175a 100644 --- a/types/three/src/nodes/gpgpu/BarrierNode.d.ts +++ b/types/three/src/nodes/gpgpu/BarrierNode.d.ts @@ -3,6 +3,8 @@ import Node from "../core/Node.js"; declare class BarrierNode extends Node { scope: string; + readonly isBarrierNode: boolean; + constructor(scope: string); } diff --git a/types/three/src/nodes/gpgpu/ComputeBuiltinNode.d.ts b/types/three/src/nodes/gpgpu/ComputeBuiltinNode.d.ts index 51b74015978035..a90d6d9de5c50b 100644 --- a/types/three/src/nodes/gpgpu/ComputeBuiltinNode.d.ts +++ b/types/three/src/nodes/gpgpu/ComputeBuiltinNode.d.ts @@ -1,13 +1,22 @@ import Node from "../core/Node.js"; +import { NodeBuilder } from "../Nodes.js"; -declare class ComputeBuiltinNode extends Node { - constructor(builtinName: string, nodeType: string); +interface ComputeBuiltinNodeInterface { + setBuiltinName(builtinName: string): this; + getBuiltinName(builder: NodeBuilder): string; + hasBuiltin(builder: NodeBuilder): boolean; } +declare const ComputeBuiltinNode: { + new(builtinName: string, nodeType: TNodeType): ComputeBuiltinNode; +}; + +type ComputeBuiltinNode = Node & ComputeBuiltinNodeInterface; + export default ComputeBuiltinNode; -export const numWorkgroups: ComputeBuiltinNode; -export const workgroupId: ComputeBuiltinNode; -export const globalId: ComputeBuiltinNode; -export const localId: ComputeBuiltinNode; -export const subgroupSize: ComputeBuiltinNode; +export const numWorkgroups: ComputeBuiltinNode<"uvec3">; +export const workgroupId: ComputeBuiltinNode<"uvec3">; +export const globalId: ComputeBuiltinNode<"uvec3">; +export const localId: ComputeBuiltinNode<"uvec3">; +export const subgroupSize: ComputeBuiltinNode<"uint">; diff --git a/types/three/src/nodes/gpgpu/ComputeNode.d.ts b/types/three/src/nodes/gpgpu/ComputeNode.d.ts index c3a6507f3629db..12810d52f7540d 100644 --- a/types/three/src/nodes/gpgpu/ComputeNode.d.ts +++ b/types/three/src/nodes/gpgpu/ComputeNode.d.ts @@ -1,16 +1,20 @@ import Renderer from "../../renderers/common/Renderer.js"; import Node from "../core/Node.js"; +import UniformNode from "../core/UniformNode.js"; export default class ComputeNode extends Node { - readonly isComputeNode: true; + readonly isComputeNode: boolean; computeNode: Node; workgroupSize: number[]; count: number | number[] | null; + dispatchSize: number | number[] | null; name: string; onInitFunction: ((args: { renderer: Renderer }) => void) | null; + countNode: UniformNode<"uint", number> | null; + constructor(computeNode: Node, workgroupSize: number[]); setCount(count: number | number[]): this; @@ -23,7 +27,7 @@ export default class ComputeNode extends Node { */ label: (name: string) => this; - onInit(callback: ((args: { renderer: Renderer }) => void) | null): void; + onInit(callback: ((args: { renderer: Renderer }) => void) | null): this; } export const computeKernel: (node: Node, workgroupSize?: number[]) => ComputeNode; diff --git a/types/three/src/nodes/materialx/lib/mx_noise.d.ts b/types/three/src/nodes/materialx/lib/mx_noise.d.ts index 735aec32f3faaf..309908a2d3cb1f 100644 --- a/types/three/src/nodes/materialx/lib/mx_noise.d.ts +++ b/types/three/src/nodes/materialx/lib/mx_noise.d.ts @@ -1,5 +1,4 @@ import Node from "../../core/Node.js"; -import VarNode from "../../core/VarNode.js"; export const mx_select: ( b_immutable: Node | boolean, @@ -14,7 +13,7 @@ export const mx_negate_if: ( export const mx_floor: (x_immutable: Node | number) => Node; -export const mx_floorfrac: (x_immutable: Node | number, i: VarNode) => Node; +export const mx_floorfrac: (x_immutable: Node | number, i: Node) => Node; export const mx_bilerp_0: ( v0_immutable: Node | number, @@ -140,9 +139,9 @@ export const mx_gradient_scale3d: (v_immutable: Node | number) => Node; export const mx_rotl32: (x_immutable: Node | number, k_immutable: Node | number) => Node; export const mx_bjmix: ( - a: VarNode, - b: VarNode, - c: VarNode, + a: Node, + b: Node, + c: Node, ) => Node; export const mx_bjfinal: ( diff --git a/types/three/src/nodes/math/MathNode.d.ts b/types/three/src/nodes/math/MathNode.d.ts index b0708bc59295d8..13f9f34e28c647 100644 --- a/types/three/src/nodes/math/MathNode.d.ts +++ b/types/three/src/nodes/math/MathNode.d.ts @@ -18,11 +18,17 @@ export type MathNodeMethod1 = | typeof MathNode.NORMALIZE | typeof MathNode.FRACT | typeof MathNode.SIN + | typeof MathNode.SINH | typeof MathNode.COS + | typeof MathNode.COSH | typeof MathNode.TAN + | typeof MathNode.TANH | typeof MathNode.ASIN + | typeof MathNode.ASINH | typeof MathNode.ACOS + | typeof MathNode.ACOSH | typeof MathNode.ATAN + | typeof MathNode.ATANH | typeof MathNode.ABS | typeof MathNode.SIGN | typeof MathNode.LENGTH @@ -77,11 +83,17 @@ export default class MathNode extends TempNode { static NORMALIZE: "normalize"; static FRACT: "fract"; static SIN: "sin"; + static SINH: "sinh"; static COS: "cos"; + static COSH: "cosh"; static TAN: "tan"; + static TANH: "tanh"; static ASIN: "asin"; + static ASINH: "asinh"; static ACOS: "acos"; + static ACOSH: "acosh"; static ATAN: "atan"; + static ATANH: "atanh"; static ABS: "abs"; static SIGN: "sign"; static LENGTH: "length"; @@ -236,20 +248,66 @@ declare module "../core/Node.js" { } } -export const sin: (x: FloatOrNumber) => Node<"float">; -export const cos: (x: FloatOrNumber) => Node<"float">; -export const tan: (x: FloatOrNumber) => Node<"float">; -export const asin: (x: FloatOrNumber) => Node<"float">; -export const acos: (x: FloatOrNumber) => Node<"float">; -export const atan: (y: FloatOrNumber, x?: FloatOrNumber) => Node<"float">; +interface TrigonometricFunction { + (x: FloatOrNumber): Node<"float">; + (x: Node<"vec2">): Node<"vec2">; + (x: Node<"vec3">): Node<"vec3">; + (x: Node<"vec4">): Node<"vec4">; +} +interface ArcTanFunction { + (y: FloatOrNumber, x?: FloatOrNumber): Node<"float">; + (y: Node<"vec2">, x?: Vec2OrLessOrFloat): Node<"vec2">; + (y: Node<"vec3">, x?: Vec3OrLessOrFloat): Node<"vec3">; + (y: Node<"vec4">, x?: Vec4OrLessOrFloat): Node<"vec4">; +} +export const sin: TrigonometricFunction; +export const sinh: TrigonometricFunction; +export const cos: TrigonometricFunction; +export const cosh: TrigonometricFunction; +export const tan: TrigonometricFunction; +export const tanh: TrigonometricFunction; +export const asin: TrigonometricFunction; +export const asinh: TrigonometricFunction; +export const acos: TrigonometricFunction; +export const acosh: TrigonometricFunction; +export const atan: ArcTanFunction; +export const atanh: TrigonometricFunction; declare module "../core/Node.js" { interface FloatExtensions { sin: () => Node<"float">; + sinh: () => Node<"float">; cos: () => Node<"float">; + cosh: () => Node<"float">; tan: () => Node<"float">; + tanh: () => Node<"float">; asin: () => Node<"float">; + asinh: () => Node<"float">; acos: () => Node<"float">; + acosh: () => Node<"float">; atan: (x?: FloatOrNumber) => Node<"float">; + atanh: () => Node<"float">; + } + interface FloatVecExtensions { + sin: () => Node; + sinh: () => Node; + cos: () => Node; + cosh: () => Node; + tan: () => Node; + tanh: () => Node; + asin: () => Node; + asinh: () => Node; + acos: () => Node; + acosh: () => Node; + atanh: () => Node; + } + interface Vec2Extensions { + atan: (x?: Vec2OrLessOrFloat) => Node<"vec2">; + } + interface Vec3Extensions { + atan: (x?: Vec3OrLessOrFloat) => Node<"vec3">; + } + interface Vec4Extensions { + atan: (x?: Vec4OrLessOrFloat) => Node<"vec4">; } } diff --git a/types/three/src/nodes/tsl/TSLBase.d.ts b/types/three/src/nodes/tsl/TSLBase.d.ts index b899d353a62adf..af9533621392da 100644 --- a/types/three/src/nodes/tsl/TSLBase.d.ts +++ b/types/three/src/nodes/tsl/TSLBase.d.ts @@ -21,7 +21,7 @@ export * from "../math/MathNode.js"; export * from "../math/OperatorNode.js"; export * from "../utils/DebugNode.js"; export * from "../utils/Discard.js"; -export * from "../utils/RemapNode.js"; +export * from "../utils/Remap.js"; export * from "./TSLCore.js"; /** diff --git a/types/three/src/nodes/tsl/TSLCore.d.ts b/types/three/src/nodes/tsl/TSLCore.d.ts index dcc649c0e37950..61edb02287e644 100644 --- a/types/three/src/nodes/tsl/TSLCore.d.ts +++ b/types/three/src/nodes/tsl/TSLCore.d.ts @@ -6,9 +6,12 @@ import { Vector2 } from "../../math/Vector2.js"; import { Vector3 } from "../../math/Vector3.js"; import { Vector4 } from "../../math/Vector4.js"; import ConstNode from "../core/ConstNode.js"; -import Node, { NumOrBoolType } from "../core/Node.js"; +import Node, { MatType, NumOrBoolType } from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; import StackNode from "../core/StackNode.js"; +import VarNode from "../core/VarNode.js"; +import ConvertNode from "../utils/ConvertNode.js"; +import JoinNode from "../utils/JoinNode.js"; export function addMethodChaining(name: string, nodeElement: unknown): void; @@ -1371,9 +1374,6 @@ interface SetSwizzle3 { setXY(value: Node> | NumOrBool): Node>; setRG(value: Node> | NumOrBool): Node>; setST(value: Node> | NumOrBool): Node>; - setXZ(value: Node> | NumOrBool): Node>; - setRB(value: Node> | NumOrBool): Node>; - setSP(value: Node> | NumOrBool): Node>; setYZ(value: Node> | NumOrBool): Node>; setGB(value: Node> | NumOrBool): Node>; setTP(value: Node> | NumOrBool): Node>; @@ -1398,30 +1398,15 @@ interface SetSwizzle4 { setXY(value: Node> | NumOrBool): Node>; setRG(value: Node> | NumOrBool): Node>; setST(value: Node> | NumOrBool): Node>; - setXZ(value: Node> | NumOrBool): Node>; - setRB(value: Node> | NumOrBool): Node>; - setSP(value: Node> | NumOrBool): Node>; setYZ(value: Node> | NumOrBool): Node>; setGB(value: Node> | NumOrBool): Node>; setTP(value: Node> | NumOrBool): Node>; - setXW(value: Node> | NumOrBool): Node>; - setRA(value: Node> | NumOrBool): Node>; - setSQ(value: Node> | NumOrBool): Node>; - setYW(value: Node> | NumOrBool): Node>; - setGA(value: Node> | NumOrBool): Node>; - setTQ(value: Node> | NumOrBool): Node>; setZW(value: Node> | NumOrBool): Node>; setBA(value: Node> | NumOrBool): Node>; setPQ(value: Node> | NumOrBool): Node>; setXYZ(value: Node> | NumOrBool): Node>; setRGB(value: Node> | NumOrBool): Node>; setSTP(value: Node> | NumOrBool): Node>; - setXYW(value: Node> | NumOrBool): Node>; - setRGA(value: Node> | NumOrBool): Node>; - setSTQ(value: Node> | NumOrBool): Node>; - setXZW(value: Node> | NumOrBool): Node>; - setRBA(value: Node> | NumOrBool): Node>; - setSPQ(value: Node> | NumOrBool): Node>; setYZW(value: Node> | NumOrBool): Node>; setGBA(value: Node> | NumOrBool): Node>; setTPQ(value: Node> | NumOrBool): Node>; @@ -1564,21 +1549,51 @@ declare module "../core/Node.js" { } } -/** anything that can be passed to {@link nodeObject} */ -export type NodeObjectOption = Node | number | string; - -// same logic as in ShaderNodeObject: number,boolean,node->node, otherwise do nothing export type NodeObject = T extends Node ? T : T extends number ? Node<"float"> : T extends boolean ? Node<"bool"> + : T extends (...args: never) => unknown ? unknown // FIXME This should return an FnNode + : T extends Vector2 ? Node<"vec2"> + : T extends Vector3 ? Node<"vec3"> + : T extends Vector4 ? Node<"vec4"> + : T extends Matrix2 ? Node<"mat2"> + : T extends Matrix3 ? Node<"mat3"> + : T extends Matrix4 ? Node<"mat4"> + : T extends Color ? Node<"color"> + : T extends ArrayBuffer ? Node<"ArrayBuffer"> + : T; + +type Proxied = T extends Node + ? Node extends T ? TNodeType extends "float" ? Node<"float"> | Node<"uint"> | number // FIXME remove Node<"uint"> + : TNodeType extends "bool" ? Node<"bool"> | boolean + : TNodeType extends "vec2" ? Node<"vec2"> | Vector2 + : TNodeType extends "vec3" ? Node<"vec3"> | Vector3 + : TNodeType extends "vec4" ? Node<"vec4"> | Vector4 + : TNodeType extends "mat2" ? Node<"mat2"> | Matrix2 + : TNodeType extends "mat3" ? Node<"mat3"> | Matrix3 + : TNodeType extends "mat4" ? Node<"mat4"> | Matrix4 + : TNodeType extends "color" ? Node<"color"> | Color + : TNodeType extends "ArrayBuffer" ? Node<"ArrayBuffer"> | ArrayBuffer + : T + : T : T; -// opposite of NodeObject: node -> node|boolean|number, otherwise do nothing -type Proxied = T extends Node | number ? Node | number : T; +type CoercibleToNodeType = TNodeType extends "float" ? Node<"float"> | Node<"int"> | Node<"uint"> | number + : TNodeType extends "bool" ? Node<"bool"> | boolean + : TNodeType extends "vec2" ? Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Vector2 + : TNodeType extends "vec3" ? Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Vector3 + : TNodeType extends "vec4" ? Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Vector4 + : TNodeType extends "mat2" ? Node<"mat2"> | Matrix2 + : TNodeType extends "vec3" ? Node<"mat3"> | Matrix3 + : TNodeType extends "vec4" ? Node<"mat4"> | Matrix4 + : TNodeType extends "color" ? Node<"color"> | Color + : TNodeType extends "ArrayBuffer" ? Node<"ArrayBuffer"> | ArrayBuffer + : Node; + // https://github.com/microsoft/TypeScript/issues/42435#issuecomment-765557874 // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type -export type ProxiedTuple = [...{ [index in keyof T]: Proxied }]; -export type ProxiedObject = { [index in keyof T]: Proxied }; +export type ProxiedTuple = [...{ [Index in keyof T]: Proxied }]; +export type ProxiedObject = { [Index in keyof T]: Proxied }; // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type type RemoveTail = T extends [unknown, ...infer X] ? X : []; // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type @@ -1664,8 +1679,8 @@ type GetConstructorsByScope = ConstructorUnion = ConstructorUnion>; type GetPossibleScopes = ExtractScopes>; -type NodeArray = { [index in keyof T]: NodeObject }; -type NodeObjects = { [key in keyof T]: T[key] extends NodeObjectOption ? NodeObject : T[key] }; +type NodeArray = { [Index in keyof T]: NodeObject }; +type NodeObjects = { [Key in keyof T]: NodeObject }; type ConstructedNode = T extends new(...args: any[]) => infer R ? (R extends Node ? R : never) : never; export type NodeOrType = Node | string; @@ -1686,12 +1701,12 @@ export class ShaderNode { ) => R; } -export function nodeObject(obj: T): NodeObject; -export function nodeObjectIntent(obj: T): NodeObject; +export function nodeObject(obj: T): NodeObject; +export function nodeObjectIntent(obj: T): NodeObject; export function nodeObjects(obj: T): NodeObjects; // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type -export function nodeArray(obj: readonly [...T]): NodeArray; +export function nodeArray(obj: readonly [...T]): NodeArray; export function nodeProxy( nodeClass: T, @@ -1705,7 +1720,7 @@ export function nodeProxy>( export function nodeProxy>( nodeClass: T, scope: S, - factor: NodeObjectOption, + factor: unknown, ): (...params: ProxiedTuple>>) => ConstructedNode; export function nodeImmutable( @@ -1725,10 +1740,10 @@ export function nodeProxyIntent>( export function nodeProxyIntent>( nodeClass: T, scope: S, - factor: NodeObjectOption, + factor: unknown, ): (...params: ProxiedTuple>>) => ConstructedNode; -interface Layout { +interface FullLayout { name: string; type: string; inputs: { @@ -1738,32 +1753,38 @@ interface Layout { }[]; } -export interface FnNode { +interface AbbreviatedLayout { + [inputName: string]: string; + return: string; +} + +type Layout = FullLayout | AbbreviatedLayout; + +export interface FnNode { // eslint-disable-next-line @typescript-eslint/no-invalid-void-type - (...args: Args): TReturn extends void ? ShaderCallNodeInternal : TReturn; + (...args: TArgs): TReturn extends void ? ShaderCallNodeInternal : TReturn; shaderNode: ShaderNodeInternal; id: number; - getNodeType: (builder: NodeBuilder) => string | null; - getCacheKey: (force?: boolean) => number; + setLayout(layout: Layout): this; - setLayout: (layout: Layout) => this; + generateNodeType(builder: NodeBuilder): string; - once: (subBuilds?: string[] | null) => this; + once(subBuilds?: string[] | null): this; } export function Fn( jsFunc: (builder: NodeBuilder) => TReturn, - layout?: string | Record, + layout?: Layout | string, ): FnNode<[], TReturn>; export function Fn( jsFunc: (args: TArgs, builder: NodeBuilder) => TReturn, - layout?: string | Record, + layout?: Layout | string, ): FnNode, TReturn>; export function Fn( jsFunc: (args: TArgs, builder: NodeBuilder) => TReturn, - layout?: string | Record, + layout?: Layout | string, // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type ): FnNode<[ProxiedObject], TReturn>; @@ -1782,48 +1803,80 @@ declare module "../core/Node.js" { } } +/** + * Can be implicitly converted to a float + */ +type ScalarNode = Node<"float"> | Node<"int"> | Node<"uint"> | Node<"bool">; + +/** + * Can be implicitly converted to a float + */ +type Scalar = ScalarNode | number | boolean; + interface ColorFunction { // The first branch in `ConvertType` will forward the parameters to the `Color` constructor if there are no // parameters or all the parameters are non-objects - (color?: string | number): ConstNode<"color", Color>; - (r: number, g: number, b: number): ConstNode<"color", Color>; + (color?: string | number): VarNode<"color", ConstNode<"color", Color>>; + (r: number, g: number, b: number): VarNode<"color", ConstNode<"color", Color>>; // The second branch does not apply because `cacheMap` is `null` - // The third branch will be triggered if there is a single parameter. - (color: Color): ConstNode<"color", Color>; - (node: Node): Node<"color">; + // The third branch will be triggered if there is a single parameter + // ConstNode + (color: Color | Vector3): VarNode<"color", ConstNode<"color", Color>>; + // ConvertNode + (node: Node<"float">): VarNode<"color", ConvertNode<"color">>; + (node: Node<"color"> | Node<"vec3">): VarNode<"color", ConvertNode<"color">>; - // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an - // object. Not sure which cases are worth considering here. + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + ( + x: Node<"float"> | number, + y: Node<"float"> | number, + z: Node<"float"> | number, + ): VarNode<"vec3", JoinNode<"vec3">>; + (xy: Node<"vec2"> | Vector2, z: Node<"float"> | number): VarNode<"vec3", JoinNode<"vec3">>; + (x: Node<"float"> | number, yz: Node<"vec2"> | Vector2): VarNode<"vec3", JoinNode<"vec3">>; } export const color: ColorFunction; interface FloatFunction { - (value?: number): ConstNode<"float", number>; - (node: Node): Node<"float">; + // ConstNode + (value?: number): VarNode<"float", ConstNode<"float", number>>; + + // ConvertNode + (node: ScalarNode): VarNode<"float", ConvertNode<"float">>; } export const float: FloatFunction; interface IntFunction { - (value?: number): ConstNode<"int", number>; - (node: Node): Node<"int">; + // ConstNode + (value?: number): VarNode<"int", ConstNode<"int", number>>; + + // ConvertNode + (node: ScalarNode): VarNode<"int", ConvertNode<"int">>; } export const int: IntFunction; interface UintFunction { - (value?: number): ConstNode<"uint", number>; - (node: Node): Node<"uint">; + // ConstNode + (value?: number): VarNode<"uint", ConstNode<"uint", number>>; + + // ConvertNode + (node: ScalarNode): VarNode<"uint", ConvertNode<"uint">>; } export const uint: UintFunction; interface BoolFunction { - (value?: boolean): ConstNode<"bool", boolean>; - (node: Node): Node<"bool">; + // ConstNode + (value?: boolean): VarNode<"bool", ConstNode<"bool", boolean>>; + + // ConvertNode + (node: ScalarNode): VarNode<"bool", ConvertNode<"bool">>; } export const bool: BoolFunction; @@ -1831,162 +1884,517 @@ export const bool: BoolFunction; interface Vec2Function { // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no // parameters or all the parameters are non-objects - (x?: number, y?: number): ConstNode<"vec2", Vector2>; + (x?: number, y?: number): VarNode<"vec2", ConstNode<"vec2", Vector2>>; // The second branch does not apply because `cacheMap` is `null` - // The third branch will be triggered if there is a single parameter. - (value: Vector2): ConstNode<"vec2", Vector2>; - (node: Node): Node<"vec2">; + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector2): VarNode<"vec2", ConstNode<"vec2", Vector2>>; + // ConvertNode + (node: ScalarNode): VarNode<"vec2", ConvertNode<"vec2">>; + (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"vec2", ConvertNode<"vec2">>; - // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an - // object. - (x: Node | number, y: Node | number): Node<"vec2">; + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Scalar, y: Scalar): VarNode<"vec2", JoinNode<"vec2">>; } export const vec2: Vec2Function; interface Ivec2Function { - (x: number, y: number): ConstNode<"ivec2", Vector2>; - (x: Node, y: Node): Node<"ivec2">; + // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no + // parameters or all the parameters are non-objects + (x?: number, y?: number): VarNode<"ivec2", ConstNode<"ivec2", Vector2>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector2): VarNode<"ivec2", ConstNode<"ivec2", Vector2>>; + // ConvertNode + (node: Node<"int">): VarNode<"ivec2", ConvertNode<"ivec2">>; + (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"ivec2", ConvertNode<"ivec2">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Node<"int"> | number, y: Node<"int"> | number): VarNode<"ivec2", JoinNode<"ivec2">>; } export const ivec2: Ivec2Function; -export const uvec2: (x: Node, y: Node) => Node<"uvec2">; -export const bvec2: (node: Node) => Node<"bvec2">; +interface Uvec2Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no + // parameters or all the parameters are non-objects + (x?: number, y?: number): VarNode<"uvec2", ConstNode<"uvec2", Vector2>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector2): VarNode<"uvec2", ConstNode<"uvec2", Vector2>>; + // ConvertNode + (node: Node<"uint">): VarNode<"uvec2", ConvertNode<"uvec2">>; + (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"uvec2", ConvertNode<"uvec2">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Node<"uint"> | number, y: Node<"uint"> | number): VarNode<"uvec2", JoinNode<"uvec2">>; +} + +export const uvec2: Uvec2Function; + +interface Bvec2Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no + // parameters or all the parameters are non-objects + (x?: boolean, y?: boolean): VarNode<"bvec2", ConstNode<"bvec2", Vector2>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector2): VarNode<"bvec2", ConstNode<"bvec2", Vector2>>; + // ConvertNode + (node: Node<"bool">): VarNode<"bvec2", ConvertNode<"bvec2">>; + (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"bvec2", ConvertNode<"bvec2">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Node<"bool"> | boolean, y: Node<"bool"> | boolean): VarNode<"bvec2", JoinNode<"bvec2">>; +} + +export const bvec2: Bvec2Function; interface Vec3Function { // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no // parameters or all the parameters are non-objects - (x?: number, y?: number, z?: number): ConstNode<"vec3", Vector3>; + (x?: number, y?: number, z?: number): VarNode<"vec3", ConstNode<"vec3", Vector3>>; // The second branch does not apply because `cacheMap` is `null` - // The third branch will be triggered if there is a single parameter. - (value: Vector3): ConstNode<"vec3", Vector3>; - (value: [number, number, number]): ConstNode<"vec3", Vector3>; - (node: Node): Node<"vec3">; - - // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an - // object. - (x: Node | number, y: Node | number, z?: Node | number): Node<"vec3">; + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector3): VarNode<"vec3", ConstNode<"vec3", Vector3>>; + // ConvertNode + (node: ScalarNode): VarNode<"vec3", ConvertNode<"vec3">>; + (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"vec3", ConvertNode<"vec3">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Scalar, y: Scalar, z: Scalar): VarNode<"vec3", JoinNode<"vec3">>; + (xy: Node<"vec2"> | Vector2, z: Scalar): VarNode<"vec3", JoinNode<"vec3">>; + (x: Scalar, yz: Node<"vec2"> | Vector2): VarNode<"vec3", JoinNode<"vec3">>; } export const vec3: Vec3Function; -export const ivec3: (node: Node) => Node<"ivec3">; -export const uvec3: (node: Node) => Node<"uvec3">; -export const bvec3: (node: Node) => Node<"bvec3">; + +interface Ivec3Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no + // parameters or all the parameters are non-objects + (x?: number, y?: number, z?: number): VarNode<"ivec3", ConstNode<"ivec3", Vector3>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector3): VarNode<"ivec3", ConstNode<"ivec3", Vector3>>; + // ConvertNode + (node: Node<"int">): VarNode<"ivec3", ConvertNode<"ivec3">>; + (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"ivec3", ConvertNode<"ivec3">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Node<"int"> | number, y: Node<"int"> | number, z: Node<"int"> | number): VarNode<"ivec3", JoinNode<"ivec3">>; + (xy: Node<"ivec2"> | Vector2, z: Node<"int"> | number): VarNode<"ivec3", JoinNode<"ivec3">>; + (x: Node<"int"> | number, yz: Node<"ivec2"> | Vector2): VarNode<"ivec3", JoinNode<"ivec3">>; +} + +export const ivec3: Ivec3Function; + +interface Uvec3Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no + // parameters or all the parameters are non-objects + (x?: number, y?: number, z?: number): VarNode<"uvec3", ConstNode<"uvec3", Vector3>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector3): VarNode<"uvec3", ConstNode<"uvec3", Vector3>>; + // ConvertNode + (node: Node<"uint">): VarNode<"uvec3", ConvertNode<"uvec3">>; + (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"uvec3", ConvertNode<"uvec3">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Node<"uint"> | number, y: Node<"uint"> | number, z: Node<"uint"> | number): VarNode<"uvec3", JoinNode<"uvec3">>; + (xy: Node<"uvec2"> | Vector2, z: Node<"uint"> | number): VarNode<"uvec3", JoinNode<"uvec3">>; + (x: Node<"uint"> | number, yz: Node<"uvec2"> | Vector2): VarNode<"uvec3", JoinNode<"uvec3">>; +} + +export const uvec3: Uvec3Function; + +interface Bvec3Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no + // parameters or all the parameters are non-objects + (x?: boolean, y?: boolean, z?: boolean): VarNode<"bvec3", ConstNode<"bvec3", Vector3>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector3): VarNode<"bvec3", ConstNode<"bvec3", Vector3>>; + // ConvertNode + (node: Node<"bool">): VarNode<"bvec3", ConvertNode<"bvec3">>; + (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"bvec3", ConvertNode<"bvec3">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + ( + x: Node<"bool"> | boolean, + y: Node<"bool"> | boolean, + z: Node<"bool"> | boolean, + ): VarNode<"bvec3", JoinNode<"bvec3">>; + (xy: Node<"bvec2"> | Vector2, z: Node<"bool"> | boolean): VarNode<"bvec3", JoinNode<"bvec3">>; + (x: Node<"bool"> | boolean, yz: Node<"bvec2"> | Vector2): VarNode<"bvec3", JoinNode<"bvec3">>; +} + +export const bvec3: Bvec3Function; interface Vec4Function { // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no // parameters or all the parameters are non-objects - (x?: number, y?: number, z?: number, w?: number): ConstNode<"vec4", Vector4>; + (x?: number, y?: number, z?: number, w?: number): VarNode<"vec4", ConstNode<"vec4", Vector4>>; // The second branch does not apply because `cacheMap` is `null` - // The third branch will be triggered if there is a single parameter. - (value: Vector4): ConstNode<"vec4", Vector4>; - (node: Node): Node<"vec4">; - - // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an - // object. - (x: Node | number, y: Node | number, z?: Node | number, w?: Node | number): Node<"vec4">; + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector4): VarNode<"vec4", ConstNode<"vec4", Vector4>>; + // ConvertNode + (node: ScalarNode): VarNode<"vec4", ConvertNode<"vec4">>; + (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"vec4", ConvertNode<"vec4">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (x: Scalar, y: Scalar, z: Scalar, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>; + (x: Scalar, yz: Node<"vec2"> | Vector2, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>; + (x: Scalar, y: Scalar, zw: Node<"vec2"> | Vector2): VarNode<"vec4", JoinNode<"vec4">>; + (xy: Node<"vec2"> | Vector2, zw: Node<"vec2"> | Vector2): VarNode<"vec4", JoinNode<"vec4">>; + (xy: Node<"vec2"> | Vector2, z: Scalar, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>; + (xyz: Node<"vec3"> | Node<"color"> | Vector3 | Color, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>; + (x: Scalar, yzw: Node<"vec3"> | Node<"color"> | Vector3 | Color): VarNode<"vec4", JoinNode<"vec4">>; } export const vec4: Vec4Function; -export const ivec4: (node: Node) => Node<"ivec4">; -export const uvec4: (node: Node) => Node<"uvec4">; -export const bvec4: (node: Node) => Node<"bvec4">; + +interface Ivec4Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no + // parameters or all the parameters are non-objects + (x?: number, y?: number, z?: number, w?: number): VarNode<"ivec4", ConstNode<"ivec4", Vector4>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector4): VarNode<"ivec4", ConstNode<"ivec4", Vector4>>; + // ConvertNode + (node: Node<"int">): VarNode<"ivec4", ConvertNode<"ivec4">>; + (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"ivec4", ConvertNode<"ivec4">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + ( + x: Node<"int"> | number, + y: Node<"int"> | number, + z: Node<"int"> | number, + w: Node<"int"> | number, + ): VarNode<"ivec4", JoinNode<"ivec4">>; + ( + x: Node<"int"> | number, + yz: Node<"ivec2"> | Vector2, + w: Node<"int"> | number, + ): VarNode<"ivec4", JoinNode<"ivec4">>; + ( + x: Node<"int"> | number, + y: Node<"int"> | number, + zw: Node<"ivec2"> | Vector2, + ): VarNode<"ivec4", JoinNode<"ivec4">>; + (xy: Node<"ivec2"> | Vector2, zw: Node<"ivec2"> | Vector2): VarNode<"ivec4", JoinNode<"ivec4">>; + ( + xy: Node<"ivec2"> | Vector2, + z: Node<"int"> | number, + w: Node<"int"> | number, + ): VarNode<"ivec4", JoinNode<"ivec4">>; + (xyz: Node<"ivec3"> | Vector3, w: Node<"int"> | number): VarNode<"ivec4", JoinNode<"ivec4">>; + (x: Node<"int"> | number, yzw: Node<"ivec3"> | Vector3): VarNode<"ivec4", JoinNode<"ivec4">>; +} + +export const ivec4: Ivec4Function; + +interface Uvec4Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no + // parameters or all the parameters are non-objects + (x?: number, y?: number, z?: number, w?: number): VarNode<"uvec4", ConstNode<"uvec4", Vector4>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector4): VarNode<"uvec4", ConstNode<"uvec4", Vector4>>; + // ConvertNode + (node: Node<"uint">): VarNode<"uvec4", ConvertNode<"uvec4">>; + (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"uvec4", ConvertNode<"uvec4">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + ( + x: Node<"uint"> | number, + y: Node<"uint"> | number, + z: Node<"uint"> | number, + w: Node<"uint"> | number, + ): VarNode<"uvec4", JoinNode<"uvec4">>; + ( + x: Node<"uint"> | number, + yz: Node<"uvec2"> | Vector2, + w: Node<"uint"> | number, + ): VarNode<"uvec4", JoinNode<"uvec4">>; + ( + x: Node<"uint"> | number, + y: Node<"uint"> | number, + zw: Node<"uvec2"> | Vector2, + ): VarNode<"uvec4", JoinNode<"uvec4">>; + (xy: Node<"uvec2"> | Vector2, zw: Node<"uvec2"> | Vector2): VarNode<"uvec4", JoinNode<"uvec4">>; + ( + xy: Node<"uvec2"> | Vector2, + z: Node<"uint"> | number, + w: Node<"uint"> | number, + ): VarNode<"uvec4", JoinNode<"uvec4">>; + (xyz: Node<"uvec3"> | Vector3, w: Node<"uint"> | number): VarNode<"uvec4", JoinNode<"uvec4">>; + (x: Node<"uint"> | number, yzw: Node<"uvec3"> | Vector3): VarNode<"uvec4", JoinNode<"uvec4">>; +} + +export const uvec4: Uvec4Function; + +interface Bvec4Function { + // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no + // parameters or all the parameters are non-objects + (x?: boolean, y?: boolean, z?: boolean, w?: boolean): VarNode<"bvec4", ConstNode<"bvec4", Vector4>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Vector4): VarNode<"bvec4", ConstNode<"bvec4", Vector4>>; + // ConvertNode + (node: Node<"bool">): VarNode<"bvec4", ConvertNode<"bvec4">>; + (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"bvec4", ConvertNode<"bvec4">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + ( + x: Node<"bool"> | boolean, + y: Node<"bool"> | boolean, + z: Node<"bool"> | boolean, + w: Node<"bool"> | boolean, + ): VarNode<"bvec4", JoinNode<"bvec4">>; + ( + x: Node<"bool"> | boolean, + yz: Node<"bvec2"> | Vector2, + w: Node<"bool"> | boolean, + ): VarNode<"bvec4", JoinNode<"bvec4">>; + ( + x: Node<"bool"> | boolean, + y: Node<"bool"> | boolean, + zw: Node<"bvec2"> | Vector2, + ): VarNode<"bvec4", JoinNode<"bvec4">>; + (xy: Node<"bvec2"> | Vector2, zw: Node<"bvec2"> | Vector2): VarNode<"bvec4", JoinNode<"bvec4">>; + ( + xy: Node<"bvec2"> | Vector2, + z: Node<"bool"> | boolean, + w: Node<"bool"> | boolean, + ): VarNode<"bvec4", JoinNode<"bvec4">>; + (xyz: Node<"bvec3"> | Vector3, w: Node<"bool"> | boolean): VarNode<"bvec4", JoinNode<"bvec4">>; + (x: Node<"bool"> | boolean, yzw: Node<"bvec3"> | Vector3): VarNode<"bvec4", JoinNode<"bvec4">>; +} + +export const bvec4: Bvec4Function; interface Mat2Function { - (value: Matrix2): ConstNode<"mat2", Matrix2>; - (node: Node): Node<"mat2">; + // The first branch in `ConvertType` will forward the parameters to the `Matrix2` constructor if there are no + // parameters or all the parameters are non-objects + (): VarNode<"mat2", ConstNode<"mat2", Matrix2>>; + (n11: number, n12: number, n21: number, n22: number): VarNode<"mat2", ConstNode<"mat2", Matrix2>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Matrix2): VarNode<"mat2", ConstNode<"mat2", Matrix2>>; + // ConvertNode + (node: Node<"mat2">): VarNode<"mat2", ConvertNode<"mat2">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object + (n1: Node<"vec2"> | Vector2, n2: Node<"vec2"> | Vector2): VarNode<"mat2", JoinNode<"mat2">>; + ( + n11: Node<"float"> | number, + n12: Node<"float"> | number, + n21: Node<"float"> | number, + n22: Node<"float"> | number, + ): VarNode<"mat2", JoinNode<"mat2">>; } export const mat2: Mat2Function; interface Mat3Function { - (value: Matrix3): ConstNode<"mat3", Matrix3>; + // The first branch in `ConvertType` will forward the parameters to the `Matrix3` constructor if there are no + // parameters or all the parameters are non-objects + (): VarNode<"mat3", ConstNode<"mat3", Matrix3>>; + ( + n11: number, + n12: number, + n13: number, + n21: number, + n22: number, + n23: number, + n31: number, + n32: number, + n33: number, + ): VarNode<"mat3", ConstNode<"mat3", Matrix3>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Matrix3): VarNode<"mat3", ConstNode<"mat3", Matrix3>>; + // ConvertNode + (node: Node<"mat3">): VarNode<"mat3", ConvertNode<"mat3">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object ( - n11: number | Node, - n12: number | Node, - n13: number | Node, - n21: number | Node, - n22: number | Node, - n23: number | Node, - n31: number | Node, - n32: number | Node, - n33: number | Node, - ): Node<"mat3">; - (): ConstNode<"mat3", Matrix3>; + n1: Node<"vec3"> | Vector3, + n2: Node<"vec3"> | Vector3, + n3: Node<"vec3"> | Vector3, + ): VarNode<"mat3", JoinNode<"mat3">>; ( - p1: Node, - p2: Node, - p3: Node, - ): Node<"mat3">; - (node: Node): Node<"mat3">; + n11: Node<"float"> | number, + n12: Node<"float"> | number, + n13: Node<"float"> | number, + n21: Node<"float"> | number, + n22: Node<"float"> | number, + n23: Node<"float"> | number, + n31: Node<"float"> | number, + n32: Node<"float"> | number, + n33: Node<"float"> | number, + ): VarNode<"mat3", JoinNode<"mat3">>; } export const mat3: Mat3Function; interface Mat4Function { - (value: Matrix4): ConstNode<"mat4", Matrix4>; + // The first branch in `ConvertType` will forward the parameters to the `Matrix4` constructor if there are no + // parameters or all the parameters are non-objects + (): VarNode<"mat4", ConstNode<"mat4", Matrix4>>; ( - n11: number | Node, - n12: number | Node, - n13: number | Node, - n14: number | Node, - n21: number | Node, - n22: number | Node, - n23: number | Node, - n24: number | Node, - n31: number | Node, - n32: number | Node, - n33: number | Node, - n34: number | Node, - n41: number | Node, - n42: number | Node, - n43: number | Node, - n44: number | Node, - ): Node<"mat4">; - (): ConstNode<"mat4", Matrix4>; + n11: number, + n12: number, + n13: number, + n14: number, + n21: number, + n22: number, + n23: number, + n24: number, + n31: number, + n32: number, + n33: number, + n34: number, + n41: number, + n42: number, + n43: number, + n44: number, + ): VarNode<"mat4", ConstNode<"mat4", Matrix4>>; + + // The second branch does not apply because `cacheMap` is `null` + + // The third branch will be triggered if there is a single parameter + // ConstNode + (value: Matrix4): VarNode<"mat4", ConstNode<"mat4", Matrix4>>; + // ConvertNode + (node: Node<"mat4">): VarNode<"mat4", ConvertNode<"mat4">>; + + // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an + // object ( - p1: Node, - p2: Node, - p3: Node, - p4: Node, - ): Node<"mat4">; - (node: Node): Node<"mat4">; + n1: Node<"vec4"> | Vector4, + n2: Node<"vec4"> | Vector4, + n3: Node<"vec4"> | Vector4, + n4: Node<"vec4"> | Vector4, + ): VarNode<"mat4", JoinNode<"mat4">>; + ( + n11: Node<"float"> | number, + n12: Node<"float"> | number, + n13: Node<"float"> | number, + n14: Node<"float"> | number, + n21: Node<"float"> | number, + n22: Node<"float"> | number, + n23: Node<"float"> | number, + n24: Node<"float"> | number, + n31: Node<"float"> | number, + n32: Node<"float"> | number, + n33: Node<"float"> | number, + n34: Node<"float"> | number, + n41: Node<"float"> | number, + n42: Node<"float"> | number, + n43: Node<"float"> | number, + n44: Node<"float"> | number, + ): VarNode<"mat4", JoinNode<"mat4">>; } export const mat4: Mat4Function; -export const string: (value?: string) => Node<"string">; -export const arrayBuffer: (value: ArrayBuffer) => Node<"ArrayBuffer">; +export const string: unknown; +export const arrayBuffer: unknown; declare module "../core/Node.js" { - interface NodeElements { - toColor: () => Node<"color">; - toFloat: () => Node<"float">; - toInt: () => Node<"int">; - toUint: () => Node<"uint">; - toBool: () => Node<"bool">; - toVec2: () => Node<"vec2">; - toIVec2: () => Node<"ivec2">; - toUVec2: () => Node<"uvec2">; - toBVec2: () => Node<"bvec2">; - toVec3: () => Node<"vec3">; - toIVec3: () => Node<"ivec3">; - toUVec3: () => Node<"uvec3">; - toBVec3: () => Node<"bvec3">; - toVec4: () => Node<"vec4">; - toIVec4: () => Node<"ivec4">; - toUVec4: () => Node<"uvec4">; - toBVec4: () => Node<"bvec4">; - toMat2: () => Node<"mat2">; - toMat3: () => Node<"mat3">; - toMat4: () => Node<"mat4">; + interface ColorExtensions { + toColor: () => VarNode<"color", ConvertNode<"color">>; + } + + interface NumOrBoolExtensions { + toFloat: () => VarNode<"float", ConvertNode<"float">>; + toInt: () => VarNode<"int", ConvertNode<"int">>; + toUint: () => VarNode<"uint", ConvertNode<"uint">>; + toBool: () => VarNode<"bool", ConvertNode<"bool">>; + } + + interface NumOrBoolVec2Extensions { + toVec2: () => VarNode<"vec2", ConvertNode<"vec2">>; + toIVec2: () => VarNode<"ivec2", ConvertNode<"ivec2">>; + toUVec2: () => VarNode<"uvec2", ConvertNode<"uvec2">>; + toBVec2: () => VarNode<"bvec2", ConvertNode<"bvec2">>; + } + + interface NumOrBoolVec3Extensions { + toColor: () => VarNode<"color", ConvertNode<"color">>; + toVec3: () => VarNode<"vec3", ConvertNode<"vec3">>; + toIVec3: () => VarNode<"ivec3", ConvertNode<"ivec3">>; + toUVec3: () => VarNode<"uvec3", ConvertNode<"uvec3">>; + toBVec3: () => VarNode<"bvec3", ConvertNode<"bvec3">>; + } + + interface NumOrBoolVec4Extensions { + toVec4: () => VarNode<"vec4", ConvertNode<"vec4">>; + toIVec4: () => VarNode<"ivec4", ConvertNode<"ivec4">>; + toUVec4: () => VarNode<"uvec4", ConvertNode<"uvec4">>; + toBVec4: () => VarNode<"bvec4", ConvertNode<"bvec4">>; + } + + interface MatExtensions { + toMat2: () => VarNode<"mat2", ConvertNode<"mat2">>; + toMat3: () => VarNode<"mat3", ConvertNode<"mat3">>; + toMat4: () => VarNode<"mat4", ConvertNode<"mat4">>; } } diff --git a/types/three/src/nodes/utils/ConvertNode.d.ts b/types/three/src/nodes/utils/ConvertNode.d.ts index 7972df6089a149..7e632ad2707595 100644 --- a/types/three/src/nodes/utils/ConvertNode.d.ts +++ b/types/three/src/nodes/utils/ConvertNode.d.ts @@ -1,7 +1,14 @@ import Node from "../core/Node.js"; -export default class ConvertNode extends Node { +interface ConvertNodeInterface { node: Node; convertTo: string; - constructor(node: Node, convertTo: string); } + +declare const ConvertNode: { + new(node: Node, convertTo: string): ConvertNode; +}; + +type ConvertNode = Node & ConvertNodeInterface; + +export default ConvertNode; diff --git a/types/three/src/nodes/utils/EventNode.d.ts b/types/three/src/nodes/utils/EventNode.d.ts index 271380ebcb589d..a2f8e4043cc548 100644 --- a/types/three/src/nodes/utils/EventNode.d.ts +++ b/types/three/src/nodes/utils/EventNode.d.ts @@ -11,8 +11,10 @@ declare class EventNode extends Node { static OBJECT: "object"; static MATERIAL: "material"; + static FRAME: "frame"; static BEFORE_OBJECT: "beforeObject"; static BEFORE_MATERIAL: "beforeMaterial"; + static BEFORE_FRAME: "beforeFrame"; } export default EventNode; @@ -21,6 +23,10 @@ export const OnObjectUpdate: (callback: (frame: NodeFrame) => void) => Node; export const OnMaterialUpdate: (callback: (frame: NodeFrame) => void) => Node; +export const OnFrameUpdate: (callback: (frame: NodeFrame) => void) => Node; + export const OnBeforeObjectUpdate: (callback: (frame: NodeFrame) => void) => Node; export const OnBeforeMaterialUpdate: (callback: (frame: NodeFrame) => void) => Node; + +export const OnBeforeFrameUpdate: (callback: (frame: NodeFrame) => void) => Node; diff --git a/types/three/src/nodes/utils/JoinNode.d.ts b/types/three/src/nodes/utils/JoinNode.d.ts index 7f456bafa7c30c..6c0f3f3ff4c175 100644 --- a/types/three/src/nodes/utils/JoinNode.d.ts +++ b/types/three/src/nodes/utils/JoinNode.d.ts @@ -1,10 +1,14 @@ import Node from "../core/Node.js"; import { TempNode } from "../Nodes.js"; -/** - * This node constructs given type from elements, like vec3(a,b,c) - */ -export default class JoinNode extends TempNode { +interface JoinNodeInterface { nodes: Node[]; - constructor(nodes: Node[]); } + +declare const JoinNode: { + new(nodes: Node[]): JoinNode; +}; + +type JoinNode = TempNode & JoinNodeInterface; + +export default JoinNode; diff --git a/types/three/src/nodes/utils/LoopNode.d.ts b/types/three/src/nodes/utils/LoopNode.d.ts index 6e0f4b0670ce32..b803426f2bdf6f 100644 --- a/types/three/src/nodes/utils/LoopNode.d.ts +++ b/types/three/src/nodes/utils/LoopNode.d.ts @@ -1,6 +1,5 @@ import Node from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; -import { VarNode } from "../Nodes.js"; type LoopNodeType = "int" | "uint" | "float"; @@ -12,7 +11,7 @@ interface LoopNodeObjectParameter { start: Node | number; end: Node | number; condition?: string; - update?: VarNode | number | string; + update?: Node | number | string; } declare class LoopNode extends Node<"void"> { diff --git a/types/three/src/nodes/utils/RemapNode.d.ts b/types/three/src/nodes/utils/Remap.d.ts similarity index 65% rename from types/three/src/nodes/utils/RemapNode.d.ts rename to types/three/src/nodes/utils/Remap.d.ts index 36c3ee02988cba..c863be94bd1f60 100644 --- a/types/three/src/nodes/utils/RemapNode.d.ts +++ b/types/three/src/nodes/utils/Remap.d.ts @@ -1,37 +1,20 @@ import Node from "../core/Node.js"; -export default class RemapNode extends Node<"float"> { - node: Node<"float">; - inLowNode: Node<"float">; - inHighNode: Node<"float">; - outLowNode: Node<"float">; - outHighNode: Node<"float">; - - doClamp: boolean; - - constructor( - node: Node<"float">, - inLowNode: Node<"float">, - inHighNode: Node<"float">, - outLowNode?: Node<"float">, - outHighNode?: Node<"float">, - ); -} - export const remap: ( node: Node<"float">, inLowNode: Node<"float"> | number, inHighNode: Node<"float"> | number, outLowNode?: Node<"float"> | number, outHighNode?: Node<"float"> | number, -) => RemapNode; + doClamp?: Node<"bool"> | boolean, +) => Node<"float">; export const remapClamp: ( node: Node<"float">, inLowNode: Node<"float"> | number, inHighNode: Node<"float"> | number, outLowNode?: Node<"float"> | number, outHighNode?: Node<"float"> | number, -) => RemapNode; +) => Node<"float">; declare module "../core/Node.js" { interface FloatExtensions { @@ -40,13 +23,14 @@ declare module "../core/Node.js" { inHighNode: Node<"float"> | number, outLowNode?: Node<"float"> | number, outHighNode?: Node<"float"> | number, - ) => RemapNode; + doClamp?: Node<"bool"> | boolean, + ) => Node<"float">; remapClamp: ( inLowNode: Node<"float"> | number, inHighNode: Node<"float"> | number, outLowNode?: Node<"float"> | number, outHighNode?: Node<"float"> | number, - ) => RemapNode; + ) => Node<"float">; } } diff --git a/types/three/src/objects/BatchedMesh.d.ts b/types/three/src/objects/BatchedMesh.d.ts index 260b6f98668a33..98389b10522d8a 100644 --- a/types/three/src/objects/BatchedMesh.d.ts +++ b/types/three/src/objects/BatchedMesh.d.ts @@ -145,6 +145,8 @@ declare class BatchedMesh extends Mesh { * @param color - The target object that is used to store the method's result. * @return The instance's color. Use a `Vector4` to also retrieve alpha. */ + getColorAt(instanceId: number, color: Color): Color; + getColorAt(instanceId: number, color: Vector4): Vector4; getColorAt(instanceId: number, color: Color | Vector4): Color | Vector4; /** diff --git a/types/three/src/objects/InstancedMesh.d.ts b/types/three/src/objects/InstancedMesh.d.ts index 1d9bd3dcb05ccc..30b91c707aab2f 100644 --- a/types/three/src/objects/InstancedMesh.d.ts +++ b/types/three/src/objects/InstancedMesh.d.ts @@ -126,7 +126,7 @@ export class InstancedMesh< * @param index The index of an instance. Values have to be in the range `[0, count]`. Expects a `Integer` * @param color This color object will be set to the color of the defined instance. */ - getColorAt(index: number, color: Color): void; + getColorAt(index: number, color: Color): Color; /** * Sets the given color to the defined instance @@ -135,14 +135,14 @@ export class InstancedMesh< * @param index The index of an instance. Values have to be in the range `[0, count]`. Expects a `Integer` * @param color The color of a single instance. */ - setColorAt(index: number, color: Color): void; + setColorAt(index: number, color: Color): this; /** * Get the local transformation matrix of the defined instance. * @param index The index of an instance Values have to be in the range `[0, count]`. Expects a `Integer` * @param matrix This 4x4 matrix will be set to the local transformation matrix of the defined instance. */ - getMatrixAt(index: number, matrix: Matrix4): void; + getMatrixAt(index: number, matrix: Matrix4): Matrix4; /** * Get the morph target weights of the defined instance. @@ -159,7 +159,7 @@ export class InstancedMesh< * @param index The index of an instance. Values have to be in the range `[0, count]`. Expects a `Integer` * @param matrix A 4x4 matrix representing the local transformation of a single instance. */ - setMatrixAt(index: number, matrix: Matrix4): void; + setMatrixAt(index: number, matrix: Matrix4): this; /** * Sets the morph target weights to the defined instance. Make sure you set {@link .morphTexture}{@link .needsUpdate} @@ -167,7 +167,7 @@ export class InstancedMesh< * @param index The index of an instance. Values have to be in the range [0, count]. * @param mesh A mesh with {@link .morphTargetInfluences} property containing the morph target weights of a single instance. */ - setMorphAt(index: number, mesh: Mesh): void; + setMorphAt(index: number, mesh: Mesh): this; /** * No effect in {@link InstancedMesh}. @@ -181,7 +181,7 @@ export class InstancedMesh< * @remarks * Call this method whenever this instance is no longer used in your app. */ - dispose(): this; + dispose(): void; toJSON(meta?: JSONMeta): InstancedMeshJSON; } diff --git a/types/three/src/objects/SkinnedMesh.d.ts b/types/three/src/objects/SkinnedMesh.d.ts index 35149c5d11a521..da92221f38f4a6 100644 --- a/types/three/src/objects/SkinnedMesh.d.ts +++ b/types/three/src/objects/SkinnedMesh.d.ts @@ -6,6 +6,7 @@ import { Box3 } from "../math/Box3.js"; import { Matrix4, Matrix4Tuple } from "../math/Matrix4.js"; import { Sphere } from "../math/Sphere.js"; import { Vector3 } from "../math/Vector3.js"; +import { Vector4 } from "../math/Vector4.js"; import { Mesh, MeshJSON, MeshJSONObject } from "./Mesh.js"; import { Skeleton } from "./Skeleton.js"; @@ -155,6 +156,8 @@ export class SkinnedMesh< * @param vector */ applyBoneTransform(index: number, vector: Vector3): Vector3; + applyBoneTransform(index: number, vector: Vector4): Vector4; + applyBoneTransform(index: number, vector: Vector3 | Vector4): Vector3 | Vector4; toJSON(meta?: JSONMeta): SkinnedMeshJSON; } diff --git a/types/three/src/renderers/WebGLRenderer.d.ts b/types/three/src/renderers/WebGLRenderer.d.ts index 47ff9f41fd80a4..7dc1b4a4df145b 100644 --- a/types/three/src/renderers/WebGLRenderer.d.ts +++ b/types/three/src/renderers/WebGLRenderer.d.ts @@ -17,6 +17,7 @@ import { WebGLCapabilities, WebGLCapabilitiesParameters } from "./webgl/WebGLCap import { WebGLExtensions } from "./webgl/WebGLExtensions.js"; import { WebGLInfo } from "./webgl/WebGLInfo.js"; import { WebGLProgram } from "./webgl/WebGLProgram.js"; +import { WebGLProgramParametersWithUniforms } from "./webgl/WebGLPrograms.js"; import { WebGLProperties } from "./webgl/WebGLProperties.js"; import { WebGLRenderLists } from "./webgl/WebGLRenderLists.js"; import { WebGLShadowMap } from "./webgl/WebGLShadowMap.js"; @@ -116,6 +117,13 @@ export interface Effect { ): void; } +export interface NodesHandler { + setRenderer(renderer: WebGLRenderer): void; + renderStart(scene: Object3D, camera: Camera): void; + renderEnd(): void; + build(material: Material, object: Object3D, parameters: WebGLProgramParametersWithUniforms): void; +} + /** * The WebGL renderer displays your beautifully crafted scenes using WebGL, if your device supports it. * This renderer has way better performance than CanvasRenderer. @@ -315,7 +323,8 @@ export class WebGLRenderer { clearColor(): void; clearDepth(): void; clearStencil(): void; - clearTarget(renderTarget: WebGLRenderTarget, color: boolean, depth: boolean, stencil: boolean): void; + + setNodesHandler(nodesHandler: NodesHandler): void; dispose(): void; diff --git a/types/three/src/renderers/common/Animation.d.ts b/types/three/src/renderers/common/Animation.d.ts index 1185e03293dbaa..8ca0265bec5174 100644 --- a/types/three/src/renderers/common/Animation.d.ts +++ b/types/three/src/renderers/common/Animation.d.ts @@ -17,7 +17,7 @@ declare class Animation { * Constructs a new animation loop management component. * * @param {Renderer} renderer - A reference to the main renderer. - * @param {Nodes} nodes - Renderer component for managing nodes related logic. + * @param {NodeManager} nodes - Renderer component for managing nodes related logic. * @param {Info} info - Renderer component for managing metrics and monitoring data. */ constructor(renderer: Renderer, nodes: NodeManager, info: Info); @@ -30,7 +30,7 @@ declare class Animation { /** * Renderer component for managing nodes related logic. * - * @type {Nodes} + * @type {NodeManager} */ nodes: NodeManager; /** diff --git a/types/three/src/renderers/common/Attributes.d.ts b/types/three/src/renderers/common/Attributes.d.ts index 20aa271c7dbfe6..0bf0f2bdcd72fc 100644 --- a/types/three/src/renderers/common/Attributes.d.ts +++ b/types/three/src/renderers/common/Attributes.d.ts @@ -3,6 +3,7 @@ import { InterleavedBuffer } from "../../core/InterleavedBuffer.js"; import { InterleavedBufferAttribute } from "../../core/InterleavedBufferAttribute.js"; import Backend from "./Backend.js"; import DataMap from "./DataMap.js"; +import Info from "./Info.js"; /** * This renderer module manages geometry attributes. @@ -15,14 +16,21 @@ declare class Attributes extends DataMap { * Constructs a new attribute management component. * * @param {Backend} backend - The renderer's backend. + * @param {Info} info - Renderer component for managing metrics and monitoring data. */ - constructor(backend: Backend); + constructor(backend: Backend, info: Info); /** * The renderer's backend. * * @type {Backend} */ backend: Backend; + /** + * Renderer component for managing metrics and monitoring data. + * + * @type {Info} + */ + info: Info; /** * Deletes the data for the given attribute. * diff --git a/types/three/src/renderers/common/Backend.d.ts b/types/three/src/renderers/common/Backend.d.ts index 567522ebaba8b8..37571640ec4629 100644 --- a/types/three/src/renderers/common/Backend.d.ts +++ b/types/three/src/renderers/common/Backend.d.ts @@ -1,5 +1,7 @@ import { CoordinateSystem } from "../../constants.js"; +import NodeBuilder from "../../nodes/core/NodeBuilder.js"; import Renderer from "./Renderer.js"; +import RenderObject from "./RenderObject.js"; declare module "../../core/Object3D.js" { interface Object3D { @@ -25,4 +27,6 @@ export default abstract class Backend { abstract get coordinateSystem(): CoordinateSystem; getDomElement(): HTMLCanvasElement | OffscreenCanvas; + + createNodeBuilder(renderObject: RenderObject, renderer: Renderer): NodeBuilder; } diff --git a/types/three/src/renderers/common/Background.d.ts b/types/three/src/renderers/common/Background.d.ts index 9a4ee4ff9ee888..ce09898e932cad 100644 --- a/types/three/src/renderers/common/Background.d.ts +++ b/types/three/src/renderers/common/Background.d.ts @@ -16,7 +16,7 @@ declare class Background extends DataMap { * Constructs a new background management component. * * @param {Renderer} renderer - The renderer. - * @param {Nodes} nodes - Renderer component for managing nodes related logic. + * @param {NodeManager} nodes - Renderer component for managing nodes related logic. */ constructor(renderer: Renderer, nodes: NodeManager); /** @@ -28,7 +28,7 @@ declare class Background extends DataMap { /** * Renderer component for managing nodes related logic. * - * @type {Nodes} + * @type {NodeManager} */ nodes: NodeManager; /** diff --git a/types/three/src/renderers/common/BindGroup.d.ts b/types/three/src/renderers/common/BindGroup.d.ts index e20ac3f9c8e840..53b54c202b40ac 100644 --- a/types/three/src/renderers/common/BindGroup.d.ts +++ b/types/three/src/renderers/common/BindGroup.d.ts @@ -28,12 +28,6 @@ declare class BindGroup { * @type {Array} */ bindings: Binding[]; - /** - * The group index. - * - * @type {number} - */ - index: number; /** * The group's ID. * diff --git a/types/three/src/renderers/common/Bindings.d.ts b/types/three/src/renderers/common/Bindings.d.ts index 0702ef1a32515b..5631ef45c44d68 100644 --- a/types/three/src/renderers/common/Bindings.d.ts +++ b/types/three/src/renderers/common/Bindings.d.ts @@ -20,7 +20,7 @@ declare class Bindings extends DataMap { * Constructs a new bindings management component. * * @param {Backend} backend - The renderer's backend. - * @param {Nodes} nodes - Renderer component for managing nodes related logic. + * @param {NodeManager} nodes - Renderer component for managing nodes related logic. * @param {Textures} textures - Renderer component for managing textures. * @param {Attributes} attributes - Renderer component for managing attributes. * @param {Pipelines} pipelines - Renderer component for managing pipelines. @@ -61,7 +61,7 @@ declare class Bindings extends DataMap { /** * Renderer component for managing nodes related logic. * - * @type {Nodes} + * @type {NodeManager} */ nodes: NodeManager; /** diff --git a/types/three/src/renderers/common/CanvasTarget.d.ts b/types/three/src/renderers/common/CanvasTarget.d.ts index fad50f862b911e..6df109fb2c42fd 100644 --- a/types/three/src/renderers/common/CanvasTarget.d.ts +++ b/types/three/src/renderers/common/CanvasTarget.d.ts @@ -14,7 +14,9 @@ export interface CanvasTargetEventMap { * * @augments EventDispatcher */ -declare class CanvasTarget extends EventDispatcher { +declare class CanvasTarget + extends EventDispatcher +{ /** * Constructs a new CanvasTarget. * diff --git a/types/three/src/renderers/common/ComputePipeline.d.ts b/types/three/src/renderers/common/ComputePipeline.d.ts index a8ada4fe5bc7bd..72fabace32dd86 100644 --- a/types/three/src/renderers/common/ComputePipeline.d.ts +++ b/types/three/src/renderers/common/ComputePipeline.d.ts @@ -9,7 +9,7 @@ import ProgrammableStage from "./ProgrammableStage.js"; */ declare class ComputePipeline extends Pipeline { /** - * Constructs a new render pipeline. + * Constructs a new compute pipeline. * * @param {string} cacheKey - The pipeline's cache key. * @param {ProgrammableStage} computeProgram - The pipeline's compute shader. diff --git a/types/three/src/renderers/common/Info.d.ts b/types/three/src/renderers/common/Info.d.ts index 351f20a47ad017..8649d9a5840b6b 100644 --- a/types/three/src/renderers/common/Info.d.ts +++ b/types/three/src/renderers/common/Info.d.ts @@ -1,4 +1,8 @@ +import { BufferAttribute } from "../../core/BufferAttribute.js"; import { Object3D } from "../../core/Object3D.js"; +import { Texture } from "../../textures/Texture.js"; +import ProgrammableStage from "./ProgrammableStage.js"; +import ReadbackBuffer from "./ReadbackBuffer.js"; /** * This renderer module provides a series of statistical information @@ -76,12 +80,49 @@ declare class Info { * @type {Object} * @readonly * @property {number} geometries - The number of active geometries. - * @property {number} frameCalls - The number of active textures. + * @property {number} textures - The number of active textures. + * @property {number} attributes - The number of active attributes. + * @property {number} indexAttributes - The number of active index attributes. + * @property {number} storageAttributes - The number of active storage attributes. + * @property {number} indirectStorageAttributes - The number of active indirect storage attributes. + * @property {number} readbackBuffers - The number of active readback buffers. + * @property {number} programs - The number of active programs. + * @property {number} renderTargets - The number of active renderTargets. + * @property {number} total - The total memory size in bytes. + * @property {number} texturesSize - The memory size of active textures in bytes. + * @property {number} attributesSize - The memory size of active attributes in bytes. + * @property {number} indexAttributesSize - The memory size of active index attributes in bytes. + * @property {number} storageAttributesSize - The memory size of active storage attributes in bytes. + * @property {number} indirectStorageAttributesSize - The memory size of active indirect storage attributes in bytes. + * @property {number} readbackBuffersSize - The memory size of active readback buffers in bytes. + * @property {number} programsSize - The memory size of active programs in bytes. */ readonly memory: { geometries: number; textures: number; + attributes: number; + indexAttributes: number; + storageAttributes: number; + indirectStorageAttributes: number; + readbackBuffers: number; + programs: number; + renderTargets: number; + total: number; + texturesSize: number; + attributesSize: number; + indexAttributesSize: number; + storageAttributesSize: number; + indirectStorageAttributesSize: number; + readbackBuffersSize: number; + programsSize: number; }; + /** + * Map for storing calculated byte sizes of tracked objects. + * + * @type {Map} + * @private + */ + private memoryMap; /** * This method should be executed per draw call and updates the corresponding metrics. * @@ -98,6 +139,96 @@ declare class Info { * Performs a complete reset of the object. */ dispose(): void; + /** + * Tracks texture memory explicitly, updating counts and byte tracking. + * + * @param {Texture} texture + */ + createTexture(texture: Texture): void; + /** + * Tracks texture memory explicitly, updating counts and byte tracking. + * + * @param {Texture} texture + */ + destroyTexture(texture: Texture): void; + /** + * Tracks attribute memory explicitly, updating counts and byte tracking. + * + * @param {BufferAttribute} attribute + * @param {string} type - type of attribute + * @private + */ + private _createAttribute; + /** + * Tracks a regular attribute memory explicitly. + * + * @param {BufferAttribute} attribute - The attribute to track. + */ + createAttribute(attribute: BufferAttribute): void; + /** + * Tracks an index attribute memory explicitly. + * + * @param {BufferAttribute} attribute - The index attribute to track. + */ + createIndexAttribute(attribute: BufferAttribute): void; + /** + * Tracks a storage attribute memory explicitly. + * + * @param {BufferAttribute} attribute - The storage attribute to track. + */ + createStorageAttribute(attribute: BufferAttribute): void; + /** + * Tracks an indirect storage attribute memory explicitly. + * + * @param {BufferAttribute} attribute - The indirect storage attribute to track. + */ + createIndirectStorageAttribute(attribute: BufferAttribute): void; + /** + * Tracks attribute memory explicitly, updating counts and byte tracking. + * + * @param {BufferAttribute} attribute + */ + destroyAttribute(attribute: BufferAttribute): void; + /** + * Tracks a readback buffer memory explicitly. + * + * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track. + */ + createReadbackBuffer(readbackBuffer: ReadbackBuffer): void; + /** + * Tracks a readback buffer memory explicitly. + * + * @param {ReadbackBuffer} readbackBuffer - The readback buffer to track. + */ + destroyReadbackBuffer(readbackBuffer: ReadbackBuffer): void; + /** + * Tracks program memory explicitly, updating counts and byte tracking. + * + * @param {ProgrammableStage} program - The program to track. + */ + createProgram(program: ProgrammableStage): void; + /** + * Tracks program memory explicitly, updating counts and byte tracking. + * + * @param {Object} program - The program to track. + */ + destroyProgram(program: ProgrammableStage): void; + /** + * Calculates the memory size of a texture in bytes. + * + * @param {Texture} texture - The texture to calculate the size for. + * @return {number} The calculated size in bytes. + * @private + */ + private _getTextureMemorySize; + /** + * Calculates the memory size of an attribute in bytes. + * + * @param {BufferAttribute} attribute - The attribute to calculate the size for. + * @return {number} The calculated size in bytes. + * @private + */ + private _getAttributeMemorySize; } export default Info; diff --git a/types/three/src/renderers/common/InspectorBase.d.ts b/types/three/src/renderers/common/InspectorBase.d.ts index e86c5818b0ad0d..5e6fcf68ecb5a2 100644 --- a/types/three/src/renderers/common/InspectorBase.d.ts +++ b/types/three/src/renderers/common/InspectorBase.d.ts @@ -1,4 +1,5 @@ import { Camera } from "../../cameras/Camera.js"; +import { EventDispatcher } from "../../core/EventDispatcher.js"; import { RenderTarget } from "../../core/RenderTarget.js"; import Node from "../../nodes/core/Node.js"; import NodeFrame from "../../nodes/core/NodeFrame.js"; @@ -7,12 +8,17 @@ import { Scene } from "../../scenes/Scene.js"; import { Texture } from "../../textures/Texture.js"; import Renderer from "./Renderer.js"; +export interface InspectorBaseEventMap { +} + /** * InspectorBase is the base class for all inspectors. * * @class InspectorBase */ -declare class InspectorBase { +declare class InspectorBase + extends EventDispatcher +{ /** * The renderer associated with this inspector. * diff --git a/types/three/src/renderers/common/Pipelines.d.ts b/types/three/src/renderers/common/Pipelines.d.ts index 36246ce378c6b6..30bcb0ce3fc646 100644 --- a/types/three/src/renderers/common/Pipelines.d.ts +++ b/types/three/src/renderers/common/Pipelines.d.ts @@ -4,6 +4,7 @@ import BindGroup from "./BindGroup.js"; import Bindings from "./Bindings.js"; import ComputePipeline from "./ComputePipeline.js"; import DataMap from "./DataMap.js"; +import Info from "./Info.js"; import NodeManager from "./nodes/NodeManager.js"; import Pipeline from "./Pipeline.js"; import ProgrammableStage from "./ProgrammableStage.js"; @@ -21,9 +22,10 @@ declare class Pipelines extends DataMap { * Constructs a new pipeline management component. * * @param {Backend} backend - The renderer's backend. - * @param {Nodes} nodes - Renderer component for managing nodes related logic. + * @param {NodeManager} nodes - Renderer component for managing nodes related logic. + * @param {Info} info - Renderer component for managing metrics and monitoring data. */ - constructor(backend: Backend, nodes: NodeManager); + constructor(backend: Backend, nodes: NodeManager, info: Info); /** * The renderer's backend. * @@ -33,9 +35,15 @@ declare class Pipelines extends DataMap { /** * Renderer component for managing nodes related logic. * - * @type {Nodes} + * @type {NodeManager} */ nodes: NodeManager; + /** + * Renderer component for managing metrics and monitoring data. + * + * @type {Info} + */ + info: Info; /** * A references to the bindings management component. * This reference will be set inside the `Bindings` @@ -80,6 +88,14 @@ declare class Pipelines extends DataMap { * @return {RenderObjectPipeline} The render pipeline. */ getForRender(renderObject: RenderObject, promises?: Promise[] | null): RenderObjectPipeline; + /** + * Checks if the render pipeline for the given render object is ready for drawing. + * Returns false if the GPU pipeline is still being compiled asynchronously. + * + * @param {RenderObject} renderObject - The render object. + * @return {boolean} True if the pipeline is ready for drawing. + */ + isReady(renderObject: RenderObject): boolean; /** * Deletes the pipeline for the given render object. * diff --git a/types/three/src/renderers/common/ReadbackBuffer.d.ts b/types/three/src/renderers/common/ReadbackBuffer.d.ts new file mode 100644 index 00000000000000..cd29535bcef8ea --- /dev/null +++ b/types/three/src/renderers/common/ReadbackBuffer.d.ts @@ -0,0 +1,63 @@ +import { EventDispatcher } from "../../core/EventDispatcher.js"; + +export interface ReadbackBufferEventMap { + release: {}; + dispose: {}; +} + +/** + * A readback buffer is used to transfer data from the GPU to the CPU. + * It is primarily used to read back compute shader results. + * + * @augments EventDispatcher + */ +declare class ReadbackBuffer + extends EventDispatcher +{ + /** + * Constructs a new readback buffer. + * + * @param {number} maxByteLength - The maximum size of the buffer to be read back. + */ + constructor(maxByteLength: number); + /** + * Name used for debugging purposes. + * + * @type {string} + */ + name: string; + /** + * The mapped, read back array buffer. + * + * @type {ArrayBuffer|null} + */ + buffer: ArrayBuffer | null; + /** + * The maximum size of the buffer to be read back. + * + * @type {number} + */ + maxByteLength: number; + /** + * This flag can be used for type testing. + * + * @type {boolean} + * @readonly + * @default true + */ + readonly isReadbackBuffer: boolean; + /** + * Releases the mapped buffer data so the GPU buffer can be + * used by the GPU again. + * + * Note: Any `ArrayBuffer` data associated with this readback buffer + * are removed and no longer accessible after calling this method. + */ + release(): void; + /** + * Frees internal resources. + */ + dispose(): void; +} + +export default ReadbackBuffer; diff --git a/types/three/src/renderers/common/RenderBundle.d.ts b/types/three/src/renderers/common/RenderBundle.d.ts index 26da454cbed14f..d8dbbf152fa298 100644 --- a/types/three/src/renderers/common/RenderBundle.d.ts +++ b/types/three/src/renderers/common/RenderBundle.d.ts @@ -1,5 +1,6 @@ import { Camera } from "../../cameras/Camera.js"; import BundleGroup from "./BundleGroup.js"; +import RenderContext from "./RenderContext.js"; /** * This module is used to represent render bundles inside the renderer @@ -13,10 +14,12 @@ declare class RenderBundle { * * @param {BundleGroup} bundleGroup - The bundle group. * @param {Camera} camera - The camera the bundle group is rendered with. + * @param {RenderContext} renderContext - The render context the bundle is rendered with. */ - constructor(bundleGroup: BundleGroup, camera: Camera); + constructor(bundleGroup: BundleGroup, camera: Camera, renderContext: RenderContext); bundleGroup: BundleGroup; camera: Camera; + renderContext: RenderContext; } export default RenderBundle; diff --git a/types/three/src/renderers/common/RenderBundles.d.ts b/types/three/src/renderers/common/RenderBundles.d.ts index 26017877b5444a..9d2b31b4a652d1 100644 --- a/types/three/src/renderers/common/RenderBundles.d.ts +++ b/types/three/src/renderers/common/RenderBundles.d.ts @@ -2,6 +2,7 @@ import { Camera } from "../../cameras/Camera.js"; import BundleGroup from "./BundleGroup.js"; import ChainMap from "./ChainMap.js"; import RenderBundle from "./RenderBundle.js"; +import RenderContext from "./RenderContext.js"; /** * This renderer module manages render bundles. @@ -20,9 +21,10 @@ declare class RenderBundles { * * @param {BundleGroup} bundleGroup - The bundle group. * @param {Camera} camera - The camera the bundle group is rendered with. + * @param {RenderContext} renderContext - The render context the bundle is rendered with. * @return {RenderBundle} The render bundle. */ - get(bundleGroup: BundleGroup, camera: Camera): RenderBundle; + get(bundleGroup: BundleGroup, camera: Camera, renderContext: RenderContext): RenderBundle; /** * Frees all internal resources. */ diff --git a/types/three/src/renderers/common/RenderObject.d.ts b/types/three/src/renderers/common/RenderObject.d.ts index a0d4a8b2213bc8..3e83d59e47a4bc 100644 --- a/types/three/src/renderers/common/RenderObject.d.ts +++ b/types/three/src/renderers/common/RenderObject.d.ts @@ -39,7 +39,7 @@ declare class RenderObject { /** * Constructs a new render object. * - * @param {Nodes} nodes - Renderer component for managing nodes related logic. + * @param {NodeManager} nodes - Renderer component for managing nodes related logic. * @param {Geometries} geometries - Renderer component for managing geometries. * @param {Renderer} renderer - The renderer. * @param {Object3D} object - The 3D object. @@ -66,7 +66,7 @@ declare class RenderObject { /** * Renderer component for managing nodes related logic. * - * @type {Nodes} + * @type {NodeManager} * @private */ private _nodes; diff --git a/types/three/src/renderers/common/RenderObjects.d.ts b/types/three/src/renderers/common/RenderObjects.d.ts index 9c26209092ee50..d4d44eb9576fd0 100644 --- a/types/three/src/renderers/common/RenderObjects.d.ts +++ b/types/three/src/renderers/common/RenderObjects.d.ts @@ -24,7 +24,7 @@ declare class RenderObjects { * Constructs a new render object management component. * * @param {Renderer} renderer - The renderer. - * @param {Nodes} nodes - Renderer component for managing nodes related logic. + * @param {NodeManager} nodes - Renderer component for managing nodes related logic. * @param {Geometries} geometries - Renderer component for managing geometries. * @param {Pipelines} pipelines - Renderer component for managing pipelines. * @param {Bindings} bindings - Renderer component for managing bindings. @@ -47,7 +47,7 @@ declare class RenderObjects { /** * Renderer component for managing nodes related logic. * - * @type {Nodes} + * @type {NodeManager} */ nodes: NodeManager; /** @@ -120,7 +120,7 @@ declare class RenderObjects { /** * Factory method for creating render objects with the given list of parameters. * - * @param {Nodes} nodes - Renderer component for managing nodes related logic. + * @param {NodeManager} nodes - Renderer component for managing nodes related logic. * @param {Geometries} geometries - Renderer component for managing geometries. * @param {Renderer} renderer - The renderer. * @param {Object3D} object - The 3D object. diff --git a/types/three/src/renderers/common/Renderer.d.ts b/types/three/src/renderers/common/Renderer.d.ts index 179e9db6b84977..efa5ad32a65290 100644 --- a/types/three/src/renderers/common/Renderer.d.ts +++ b/types/three/src/renderers/common/Renderer.d.ts @@ -27,8 +27,8 @@ import Info from "./Info.js"; import InspectorBase from "./InspectorBase.js"; import Lighting from "./Lighting.js"; import NodeLibrary from "./nodes/NodeLibrary.js"; +import ReadbackBuffer from "./ReadbackBuffer.js"; import { RenderItem } from "./RenderList.js"; -import StorageBufferAttribute from "./StorageBufferAttribute.js"; import XRManager from "./XRManager.js"; interface DeviceLostInfo { @@ -359,13 +359,14 @@ declare class Renderer { */ private _background; /** + * Cache for the fullscreen quad. * This fullscreen quad is used for internal render passes * like the tone mapping and color space output pass. * * @private - * @type {QuadMesh} + * @type {Map} */ - private _quad; + private _quadCache; /** * A reference to the current render context. * @@ -391,13 +392,12 @@ declare class Renderer { */ private _transparentSort; /** - * The framebuffer target. + * Cache of framebuffer targets per canvas target. * * @private - * @type {?RenderTarget} - * @default null + * @type {Map} */ - private _frameBufferTarget; + private _frameBufferTargets; /** * The clear color value. * @@ -865,10 +865,24 @@ declare class Renderer { * from the GPU to the CPU in context of compute shaders. * * @async - * @param {StorageBufferAttribute} attribute - The storage buffer attribute. - * @return {Promise} A promise that resolves with the buffer data when the data are ready. - */ - getArrayBufferAsync(attribute: BufferAttribute): Promise; + * @param {BufferAttribute} attribute - The storage buffer attribute to read frm. + * @param {ReadbackBuffer|ArrayBuffer} target - The storage buffer attribute. + * @param {number} offset - The storage buffer attribute. + * @param {number} count - The offset from which to start reading the + * @return {Promise} A promise that resolves with the buffer data when the data are ready. + */ + getArrayBufferAsync( + attribute: BufferAttribute, + target?: null, + offset?: number, + count?: number, + ): Promise; + getArrayBufferAsync( + attribute: BufferAttribute, + target: TTarget, + offset?: number, + count?: number, + ): Promise; /** * Returns the rendering context. * @@ -984,7 +998,7 @@ declare class Renderer { * Defines the viewport. * * @param {number} x - The horizontal coordinate for the upper left corner of the viewport origin in logical pixel unit. - * @param {number} y - The vertical coordinate for the upper left corner of the viewport origin in logical pixel unit. + * @param {number} y - The vertical coordinate for the upper left corner of the viewport origin in logical pixel unit. * @param {number} width - The width of the viewport in logical pixel unit. * @param {number} height - The height of the viewport in logical pixel unit. * @param {number} minDepth - The minimum depth value of the viewport. WebGPU only. @@ -1171,9 +1185,9 @@ declare class Renderer { /** * Sets the output render target for the renderer. * - * @param {Object} renderTarget - The render target to set as the output target. + * @param {?RenderTarget} renderTarget - The render target to set as the output target. */ - setOutputRenderTarget(renderTarget: RenderTarget): void; + setOutputRenderTarget(renderTarget: RenderTarget | null): void; /** * Returns the current output target. * @@ -1461,8 +1475,7 @@ declare class Renderer { passId?: string | null, ): void; /** - * Checks if the given compatibility is supported by the selected backend. If the - * renderer has not been initialized, this method always returns `false`. + * Checks if the given compatibility is supported by the selected backend. * * @param {string} name - The compatibility's name. * @return {boolean} Whether the compatibility is supported or not. diff --git a/types/three/src/renderers/common/XRManager.d.ts b/types/three/src/renderers/common/XRManager.d.ts index 8b7b0ff4d42bf8..f25f0ba5feaa76 100644 --- a/types/three/src/renderers/common/XRManager.d.ts +++ b/types/three/src/renderers/common/XRManager.d.ts @@ -33,7 +33,7 @@ export interface LayerAttributes { * * @augments EventDispatcher */ -declare class XRManager extends EventDispatcher { +declare class XRManager extends EventDispatcher { /** * Constructs a new XR manager. * @@ -162,12 +162,6 @@ declare class XRManager extends EventDispatcher { * @readonly */ private readonly _supportsGlBinding; - _frameBufferTargets: - | WeakMap - | null; /** * Helper function to create native WebXR Layer. * diff --git a/types/three/src/renderers/common/nodes/NodeManager.d.ts b/types/three/src/renderers/common/nodes/NodeManager.d.ts index 28fae2113a1d2d..2acfc45023f4f3 100644 --- a/types/three/src/renderers/common/nodes/NodeManager.d.ts +++ b/types/three/src/renderers/common/nodes/NodeManager.d.ts @@ -74,6 +74,20 @@ declare class NodeManager extends DataMap { * @type {ChainMap} */ groupsData: ChainMap; + /** + * Queue for pending async builds to limit concurrent compilation. + * + * @private + * @type {Array} + */ + private _buildQueue; + /** + * Whether an async build is currently in progress. + * + * @private + * @type {boolean} + */ + private _buildInProgress; /** * A cache for managing node objects of * scene properties like fog or environments. @@ -97,13 +111,47 @@ declare class NodeManager extends DataMap { * @return {number} The cache key. */ getForRenderCacheKey(renderObject: RenderObject): number; + /** + * Creates a node builder configured for the given render object and material. + * + * @private + * @param {RenderObject} renderObject - The render object. + * @param {Material} material - The material to use. + * @return {NodeBuilder} The configured node builder. + */ + private _createNodeBuilder; /** * Returns a node builder state for the given render object. * * @param {RenderObject} renderObject - The render object. - * @return {NodeBuilderState} The node builder state. + * @param {boolean} [useAsync=false] - Whether to use async build with yielding. + * @return {NodeBuilderState|Promise} The node builder state (or Promise if async). */ - getForRender(renderObject: RenderObject): NodeBuilderState; + getForRender(renderObject: RenderObject, useAsync?: boolean): NodeBuilderState | Promise; + /** + * Async version of getForRender() that yields to main thread during build. + * Use this in compileAsync() to prevent blocking the main thread. + * + * @param {RenderObject} renderObject - The render object. + * @return {Promise} A promise that resolves to the node builder state. + */ + getForRenderAsync(renderObject: RenderObject): Promise; + /** + * Returns nodeBuilderState if ready, null if pending async build. + * Queues async build on first call for cache miss. + * Use this in render() path to enable non-blocking compilation. + * + * @param {RenderObject} renderObject - The render object. + * @return {?NodeBuilderState} The node builder state, or null if still building. + */ + getForRenderDeferred(renderObject: RenderObject): NodeBuilderState | null; + /** + * Processes the build queue one item at a time. + * This ensures builds don't all run simultaneously and freeze the main thread. + * + * @private + */ + private _processBuildQueue; /** * Deletes the given object from the internal data map * @@ -213,14 +261,6 @@ declare class NodeManager extends DataMap { * @return {string} The output cache key. */ getOutputCacheKey(): string; - /** - * Checks if the output configuration (tone mapping and color space) for - * the given target has changed. - * - * @param {Texture} outputTarget - The output target. - * @return {boolean} Whether the output configuration has changed or not. - */ - hasOutputChange(outputTarget: Texture): boolean; /** * Returns a node that represents the output configuration (tone mapping and * color space) for the current target. @@ -252,7 +292,7 @@ declare class NodeManager extends DataMap { updateForCompute(computeNode: ComputeNode): void; /** * Triggers the call of `update()` methods - * for all nodes of the given compute node. + * for all nodes of the given render object. * * @param {RenderObject} renderObject - The render object. */ diff --git a/types/three/src/renderers/shaders/ShaderChunk.d.ts b/types/three/src/renderers/shaders/ShaderChunk.d.ts index caf4e39bb6fdb4..973300afda5ebe 100644 --- a/types/three/src/renderers/shaders/ShaderChunk.d.ts +++ b/types/three/src/renderers/shaders/ShaderChunk.d.ts @@ -55,6 +55,7 @@ export const ShaderChunk: { lights_fragment_begin: string; lights_fragment_maps: string; lights_fragment_end: string; + lightprobes_pars_fragment: string; logdepthbuf_fragment: string; logdepthbuf_pars_fragment: string; logdepthbuf_pars_vertex: string; diff --git a/types/three/src/renderers/shaders/UniformsLib.d.ts b/types/three/src/renderers/shaders/UniformsLib.d.ts index c43cb57222cca1..f089e7d648fc6b 100644 --- a/types/three/src/renderers/shaders/UniformsLib.d.ts +++ b/types/three/src/renderers/shaders/UniformsLib.d.ts @@ -1,6 +1,7 @@ import { Color } from "../../math/Color.js"; import { Matrix3 } from "../../math/Matrix3.js"; import { Vector2 } from "../../math/Vector2.js"; +import { Vector3 } from "../../math/Vector3.js"; // eslint-disable-next-line @typescript-eslint/naming-convention export interface IUniform { @@ -24,7 +25,6 @@ export const UniformsLib: { envmap: { envMap: IUniform; envMapRotation: IUniform; - flipEnvMap: IUniform; reflectivity: IUniform; ior: IUniform; refractRatio: IUniform; @@ -162,6 +162,10 @@ export const UniformsLib: { }; ltc_1: IUniform; ltc_2: IUniform; + probesSH: IUniform; + probesMin: IUniform; + probesMax: IUniform; + probesResolution: IUniform; }; points: { diffuse: IUniform; diff --git a/types/three/src/renderers/webgl-fallback/WebGLBackend.d.ts b/types/three/src/renderers/webgl-fallback/WebGLBackend.d.ts index d17bfdc6ab412a..74f01173ec8515 100644 --- a/types/three/src/renderers/webgl-fallback/WebGLBackend.d.ts +++ b/types/three/src/renderers/webgl-fallback/WebGLBackend.d.ts @@ -6,6 +6,8 @@ export interface WebGLBackendParameters extends BackendParameters { } export default class WebGLBackend extends Backend { + readonly isWebGLBackend: boolean; + constructor(parameters?: BackendParameters); get coordinateSystem(): CoordinateSystem; diff --git a/types/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.d.ts b/types/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.d.ts new file mode 100644 index 00000000000000..1f275bbb6db1c7 --- /dev/null +++ b/types/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.d.ts @@ -0,0 +1,19 @@ +import { Object3D } from "../../../core/Object3D.js"; +import { NodeShaderStage } from "../../../nodes/core/constants.js"; +import NodeBuilder from "../../../nodes/core/NodeBuilder.js"; +import Renderer from "../../common/Renderer.js"; + +declare class GLSLNodeBuilder extends NodeBuilder { + constructor(object: Object3D, renderer: Renderer); + + getUniforms(shaderStage: NodeShaderStage): string; + getAttributes(shaderStage: NodeShaderStage): string; + getVaryings(shaderStage: NodeShaderStage): string; + getInstanceIndex(): string; + getDrawIndex(): string | null; + getFrontFacing(): string; + getFragCoord(): string; + buildCode(): void; +} + +export default GLSLNodeBuilder; diff --git a/types/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.d.ts b/types/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.d.ts new file mode 100644 index 00000000000000..df52b51f7ac0e0 --- /dev/null +++ b/types/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.d.ts @@ -0,0 +1,51 @@ +import WebGLBackend from "../WebGLBackend.js"; + +/** + * A WebGL 2 backend utility module for managing the device's capabilities. + * + * @private + */ +declare class WebGLCapabilities { + /** + * Constructs a new utility object. + * + * @param {WebGLBackend} backend - The WebGL 2 backend. + */ + constructor(backend: WebGLBackend); + /** + * A reference to the WebGL 2 backend. + * + * @type {WebGLBackend} + */ + backend: WebGLBackend; + /** + * This value holds the cached max anisotropy value. + * + * @type {?number} + * @default null + */ + maxAnisotropy: number | null; + /** + * This value holds the cached max uniform block size value. + * + * @type {?number} + * @default null + */ + maxUniformBlockSize: number | null; + /** + * Returns the maximum anisotropy texture filtering value. This value + * depends on the device and is reported by the `EXT_texture_filter_anisotropic` + * WebGL extension. + * + * @return {number} The maximum anisotropy texture filtering value. + */ + getMaxAnisotropy(): number; + /** + * Returns the maximum number of bytes available for uniform buffers. + * + * @return {number} The maximum number of bytes available for uniform buffers. + */ + getUniformBufferLimit(): number; +} + +export default WebGLCapabilities; diff --git a/types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts b/types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts index c75f747459695c..93bbb6c6e62c39 100644 --- a/types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts +++ b/types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts @@ -12,10 +12,4 @@ export class WebGLBufferRenderer { render: (start: any, count: number) => void; renderInstances: (start: any, count: number, primcount: number) => void; renderMultiDraw: (starts: Int32Array, counts: Int32Array, drawCount: number) => void; - renderMultiDrawInstances: ( - starts: Int32Array, - counts: Int32Array, - drawCount: number, - primcount: Int32Array, - ) => void; } diff --git a/types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts b/types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts index 7fe363cfa57b8f..e86c43a5bdb1a8 100644 --- a/types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts +++ b/types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts @@ -10,10 +10,4 @@ export class WebGLIndexedBufferRenderer { render: (start: number, count: number) => void; renderInstances: (start: number, count: number, primcount: number) => void; renderMultiDraw: (starts: Int32Array, counts: Int32Array, drawCount: number) => void; - renderMultiDrawInstances: ( - starts: Int32Array, - counts: Int32Array, - drawCount: number, - primcount: Int32Array, - ) => void; } diff --git a/types/three/src/renderers/webgl/WebGLPrograms.d.ts b/types/three/src/renderers/webgl/WebGLPrograms.d.ts index bb7ad57bfa6b09..56d9c6fab984fb 100644 --- a/types/three/src/renderers/webgl/WebGLPrograms.d.ts +++ b/types/three/src/renderers/webgl/WebGLPrograms.d.ts @@ -53,6 +53,7 @@ export interface WebGLProgramParameters { normalMapObjectSpace: boolean; normalMapTangentSpace: boolean; + packedNormalMap: boolean; metalnessMap: boolean; roughnessMap: boolean; @@ -130,6 +131,7 @@ export interface WebGLProgramParameters { // vertexTangents: boolean; + vertexNormals: boolean; vertexColors: boolean; vertexAlphas: boolean; vertexUv1s: boolean; @@ -170,6 +172,8 @@ export interface WebGLProgramParameters { numLightProbes: number; + numLightProbeGrids: number; + numClippingPlanes: number; numClipIntersection: number; @@ -223,6 +227,7 @@ export class WebGLPrograms { shadows: Light[], scene: Scene, object: Object3D, + lightProbeGrids: unknown[], ): WebGLProgramParameters; getProgramCacheKey(parameters: WebGLProgramParameters): string; diff --git a/types/three/src/renderers/webgpu/WebGPUBackend.d.ts b/types/three/src/renderers/webgpu/WebGPUBackend.d.ts index 09138368b5bea5..c90e0139b293d5 100644 --- a/types/three/src/renderers/webgpu/WebGPUBackend.d.ts +++ b/types/three/src/renderers/webgpu/WebGPUBackend.d.ts @@ -1,14 +1,19 @@ -/// - import { CoordinateSystem, HalfFloatType, UnsignedByteType } from "../../constants.js"; import Backend, { BackendParameters } from "../common/Backend.js"; +interface GPUDevice {} + +interface GPUCanvasContext {} + export interface WebGPUBackendParameters extends BackendParameters { alpha?: boolean | undefined; - requiredLimits?: Record | undefined; + requiredLimits?: Record | undefined; trackTimestamp?: boolean | undefined; device?: GPUDevice | undefined; - powerPreference?: GPUPowerPreference | undefined; + powerPreference?: + | "low-power" + | "high-performance" + | undefined; context?: GPUCanvasContext | undefined; outputType?: typeof UnsignedByteType | typeof HalfFloatType | undefined; } diff --git a/types/three/src/renderers/webgpu/utils/WebGPUConstants.d.ts b/types/three/src/renderers/webgpu/utils/WebGPUConstants.d.ts index ead5ba69ed793e..36f4ce0cca4e79 100644 --- a/types/three/src/renderers/webgpu/utils/WebGPUConstants.d.ts +++ b/types/three/src/renderers/webgpu/utils/WebGPUConstants.d.ts @@ -93,6 +93,8 @@ export enum GPUTextureFormat { RG8Snorm = "rg8snorm", RG8Uint = "rg8uint", RG8Sint = "rg8sint", + R16Unorm = "r16unorm", + R16Snorm = "r16snorm", // 32-bit formats @@ -109,6 +111,8 @@ export enum GPUTextureFormat { RGBA8Sint = "rgba8sint", BGRA8Unorm = "bgra8unorm", BGRA8UnormSRGB = "bgra8unorm-srgb", + RG16Unorm = "rg16unorm", + RG16Snorm = "rg16snorm", // Packed 32-bit formats RGB9E5UFloat = "rgb9e5ufloat", RGB10A2Unorm = "rgb10a2unorm", @@ -122,6 +126,8 @@ export enum GPUTextureFormat { RGBA16Uint = "rgba16uint", RGBA16Sint = "rgba16sint", RGBA16Float = "rgba16float", + RGBA16Unorm = "rgba16unorm", + RGBA16Snorm = "rgba16snorm", // 128-bit formats diff --git a/types/three/src/renderers/webxr/WebXRController.d.ts b/types/three/src/renderers/webxr/WebXRController.d.ts index 956a036b4f4a60..a07aea5e49f8c8 100644 --- a/types/three/src/renderers/webxr/WebXRController.d.ts +++ b/types/three/src/renderers/webxr/WebXRController.d.ts @@ -43,7 +43,11 @@ export class XRTargetRaySpace extends Group { readonly angularVelocity: Vector3; } -export class XRGripSpace extends Group { +export interface WebXRGripSpaceEventMap extends WebXRSpaceEventMap { + gripUpdated: { data: XRInputSource; target: WebXRController }; // This Event break the THREE.EventDispatcher contract, replacing the target to the wrong instance. +} + +export class XRGripSpace extends Group { hasLinearVelocity: boolean; readonly linearVelocity: Vector3; hasAngularVelocity: boolean; diff --git a/types/three/src/renderers/webxr/WebXRManager.d.ts b/types/three/src/renderers/webxr/WebXRManager.d.ts index b7c84b6395c05e..2f91edc39d05d1 100644 --- a/types/three/src/renderers/webxr/WebXRManager.d.ts +++ b/types/three/src/renderers/webxr/WebXRManager.d.ts @@ -21,7 +21,9 @@ export interface WebXRManagerEventMap { planesdetected: { data: XRPlaneSet }; } -export class WebXRManager extends EventDispatcher { +export class WebXRManager + extends EventDispatcher +{ /** * @default true */ diff --git a/types/three/src/scenes/Scene.d.ts b/types/three/src/scenes/Scene.d.ts index 366bfba1e4fd25..ff2bb93bf63dc2 100644 --- a/types/three/src/scenes/Scene.d.ts +++ b/types/three/src/scenes/Scene.d.ts @@ -1,4 +1,4 @@ -import { JSONMeta, Object3D, Object3DJSON, Object3DJSONObject } from "../core/Object3D.js"; +import { JSONMeta, Object3D, Object3DEventMap, Object3DJSON, Object3DJSONObject } from "../core/Object3D.js"; import { Material } from "../materials/Material.js"; import { Color } from "../math/Color.js"; import { Euler, EulerTuple } from "../math/Euler.js"; @@ -25,7 +25,7 @@ export interface SceneJSON extends Object3DJSON { * Scenes allow you to set up what is to be rendered and where by three.js. * This is where you place 3D objects like meshes, lines or lights. */ -export class Scene extends Object3D { +export class Scene extends Object3D { /** * This flag can be used for type testing. * diff --git a/types/three/src/textures/ExternalTexture.d.ts b/types/three/src/textures/ExternalTexture.d.ts index fb5f442d16a02a..aa9fee6e408b9b 100644 --- a/types/three/src/textures/ExternalTexture.d.ts +++ b/types/three/src/textures/ExternalTexture.d.ts @@ -1,7 +1,8 @@ -/// - import { Texture } from "./Texture.js"; +interface GPUTexture { +} + declare class ExternalTexture extends Texture { sourceTexture: WebGLTexture | GPUTexture | null; diff --git a/types/three/src/textures/HTMLTexture.d.ts b/types/three/src/textures/HTMLTexture.d.ts new file mode 100644 index 00000000000000..d74356b3048380 --- /dev/null +++ b/types/three/src/textures/HTMLTexture.d.ts @@ -0,0 +1,27 @@ +import { + MagnificationTextureFilter, + Mapping, + MinificationTextureFilter, + PixelFormat, + TextureDataType, + Wrapping, +} from "../constants.js"; +import { Texture } from "./Texture.js"; + +declare class HTMLTexture extends Texture { + readonly isHTMLTexture: boolean; + + constructor( + image?: HTMLElement, + mapping?: Mapping, + wrapS?: Wrapping, + wrapT?: Wrapping, + magFilter?: MagnificationTextureFilter, + minFilter?: MinificationTextureFilter, + format?: PixelFormat, + type?: TextureDataType, + anisotropy?: number, + ); +} + +export { HTMLTexture }; diff --git a/types/three/src/textures/Texture.d.ts b/types/three/src/textures/Texture.d.ts index 6ee82aaff45c87..1b2eda2327f2c7 100644 --- a/types/three/src/textures/Texture.d.ts +++ b/types/three/src/textures/Texture.d.ts @@ -84,6 +84,10 @@ export interface TextureJSON { // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface OffscreenCanvas extends EventTarget {} +export interface TextureEventMap { + dispose: {}; +} + /** * Create a {@link Texture} to apply to a surface or as a reflection or refraction map. * @remarks @@ -102,7 +106,9 @@ export interface OffscreenCanvas extends EventTarget {} * @see {@link https://threejs.org/docs/index.html#api/en/textures/Texture | Official Documentation} * @see {@link https://github.com/mrdoob/three.js/blob/master/src/Textures/Texture.js | Source} */ -export class Texture extends EventDispatcher<{ dispose: {} }> { +export class Texture + extends EventDispatcher +{ /** * This creates a new {@link THREE.Texture | Texture} object. * @param image See {@link Texture.image | .image}. Default {@link THREE.Texture.DEFAULT_IMAGE} @@ -452,6 +458,15 @@ export class Texture extends EventDispatcher<{ dispose: {} }> */ pmremVersion: number; + /** + * Whether the texture should use one of the 16 bit integer formats which are normalized + * to [0, 1] or [-1, 1] (depending on signed/unsigned) when sampled. + * + * @type {boolean} + * @default false + */ + normalized: boolean; + /** * Set this to `true` to trigger an update next time the texture is used. Particularly important for setting the wrap mode. */ diff --git a/types/three/test/unit/examples/jsm/postprocessing/SavePass.ts b/types/three/test/unit/examples/jsm/postprocessing/SavePass.ts index cc874111037172..7a93ca49b59837 100644 --- a/types/three/test/unit/examples/jsm/postprocessing/SavePass.ts +++ b/types/three/test/unit/examples/jsm/postprocessing/SavePass.ts @@ -2,7 +2,7 @@ import * as THREE from "three"; import { SavePass } from "three/addons/postprocessing/SavePass.js"; let pass = new SavePass(); // $ExpectType SavePass -let rt = pass.renderTarget; // $ExpectType WebGLRenderTarget> +let rt = pass.renderTarget; // $ExpectType WebGLRenderTarget> pass = new SavePass(new THREE.WebGLRenderTarget(128, 128)); // $ExpectType SavePass -rt = pass.renderTarget; // $ExpectType WebGLRenderTarget> +rt = pass.renderTarget; // $ExpectType WebGLRenderTarget> diff --git a/types/three/test/unit/src/nodes/code/FunctionNode.ts b/types/three/test/unit/src/nodes/code/FunctionNode.ts deleted file mode 100644 index 221cda4fa03938..00000000000000 --- a/types/three/test/unit/src/nodes/code/FunctionNode.ts +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Various tests of func, fn and call - */ - -import { call, code, glslFn, ProxiedObject, uv, wgslFn } from "three/tsl"; -import { FunctionNode, Node } from "three/webgpu"; - -export const mx_noise = code("whatever"); -const includes = [mx_noise]; - -// eslint-disable-next-line @definitelytyped/no-single-element-tuple-type -const someFunc1 = new FunctionNode<[a: Node]>(); -const someFunc2 = new FunctionNode<{ a: Node }>(); - -// eslint-disable-next-line @definitelytyped/no-single-element-tuple-type -type A = ProxiedObject; - -call(someFunc1, [1]); -call(someFunc1, [uv()]); -call(someFunc1, [uv().xy]); -call(someFunc2, { a: 1 }); -call(someFunc2, { a: uv() }); -call(someFunc2, { a: uv().xy }); - -// eslint-disable-next-line @definitelytyped/no-single-element-tuple-type -export const mx_cell_noise_float_call = wgslFn<[Node]>("float mx_cell_noise_float( vec3 p )", includes); -export const mx_worley_noise_float_call = wgslFn<[Node, Node, Node]>( - "float mx_worley_noise_float( vec3 p, float jitter, int metric )", - includes, -); -export const ab_call = wgslFn<{ a: Node; b: Node }>("float mx_cell_noise_float( vec3 p )", includes); - -mx_cell_noise_float_call(uv()); -mx_worley_noise_float_call(uv(), 1, 1); -ab_call({ a: 1, b: uv() }); - -// eslint-disable-next-line @definitelytyped/no-single-element-tuple-type -export const mx_cell_noise_float = glslFn<[Node]>("float mx_cell_noise_float( vec3 p )", includes); -export const mx_worley_noise_float = glslFn<[Node, Node, Node]>( - "float mx_worley_noise_float( vec3 p, float jitter, int metric )", - includes, -); -export const ab = glslFn<{ a: Node; b: Node }>("float mx_cell_noise_float( vec3 p )", includes); - -mx_cell_noise_float(uv()); -mx_worley_noise_float(uv(), 1, 1); -ab({ a: 1, b: uv() }); diff --git a/types/three/test/unit/src/nodes/tsl/TSLCore.ts b/types/three/test/unit/src/nodes/tsl/TSLCore.ts deleted file mode 100644 index 5c026da4255308..00000000000000 --- a/types/three/test/unit/src/nodes/tsl/TSLCore.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { color, Fn, nodeImmutable, ShaderNode, vec3 } from "three/tsl"; -import { ConstNode, MaterialNode, Node, PropertyNode } from "three/webgpu"; - -const s = color(1); -s.xyz; - -nodeImmutable(MaterialNode, MaterialNode.ROTATION); -nodeImmutable(PropertyNode, "vec4", "DiffuseColor"); - -const shader = new ShaderNode<{ a: Node; b: Node }>(params => { - return params.a; -}); -shader.call({ a: s, b: new ConstNode(1) }); - -const fnWithoutArgs = Fn(() => vec3(1, 2, 3)); -fnWithoutArgs(); - -const fnWithArrayArgs = Fn(([a, b]: [a: Node<"float">, b: Node<"vec3">]) => a.add(b)); -fnWithArrayArgs(0.5, color(0.0, 0.25, 0.5)); - -const fnWithArgs = Fn(({ a, b }: { a: Node<"float">; b: Node<"vec3"> }) => a.add(b)); -fnWithArgs({ a: 0.5, b: color(0.0, 0.25, 0.5) }); diff --git a/types/three/test/unit/src/textures/CubeDepthTexture.ts b/types/three/test/unit/src/textures/CubeDepthTexture.ts new file mode 100644 index 00000000000000..2c7255b4ebe535 --- /dev/null +++ b/types/three/test/unit/src/textures/CubeDepthTexture.ts @@ -0,0 +1,6 @@ +import * as THREE from "three"; + +const texture = new THREE.CubeDepthTexture(512); +texture.isCubeDepthTexture; // $ExpectType true +texture.isCubeTexture; // $ExpectType true +texture.images; // $ExpectType CubeDepthTextureImageData diff --git a/types/three/tsconfig.json b/types/three/tsconfig.json index c34044e54a6c6c..b956c7a63ee8c2 100644 --- a/types/three/tsconfig.json +++ b/types/three/tsconfig.json @@ -38,13 +38,11 @@ "test/unit/src/audio/AudioContext.ts", "test/unit/src/core/EventDispatcher.ts", "test/unit/src/core/Uniform.ts", - "test/unit/src/nodes/code/FunctionNode.ts", "test/unit/src/nodes/display/ColorAdjustment.ts", "test/unit/src/nodes/materialx/lib/mx_hsv.ts", "test/unit/src/nodes/materialx/lib/mx_noise.ts", "test/unit/src/nodes/materialx/lib/mx_transform_color.ts", "test/unit/src/nodes/materialx/MaterialXNodes.ts", - "test/unit/src/nodes/tsl/TSLCore.ts", "test/unit/src/extras/Earcut.ts", "test/unit/src/renderers/webgl/WebGLUtils.ts", "test/unit/src/textures/Texture.ts" diff --git a/types/webrtc/readme.md b/types/webrtc/readme.md index 05ab9f1b776661..0c9e54edd303ba 100644 --- a/types/webrtc/readme.md +++ b/types/webrtc/readme.md @@ -10,5 +10,5 @@ at https://www.w3.org/TR/webrtc/. This particular set of definitions does not use any vendor-specific prefixes. Instead, you should probably use [adapter.js](https://github.com/webrtc/adapter). -The definitions track the currently published working draft. Deprecated +The definitions track the [currently published working draft](https://w3c.github.io/webrtc-pc/). Deprecated features are dropped.