@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
69 lines (68 loc) • 3.31 kB
TypeScript
import { ShaderMaterial } from 'three';
import { Object3D } from 'three';
import { Mesh } from 'three';
import { Material } from 'three';
import { PolyScene } from '../../engine/scene/PolyScene';
import { IUniform } from 'three';
export interface IUniforms {
[uniform: string]: IUniform;
}
export interface MaterialWithUniforms extends Material {
uniforms: IUniforms;
}
export declare enum CustomMaterialName {
DISTANCE = "customDistanceMaterial",
DEPTH = "customDepthMaterial",
DEPTH_DOF = "customDepthDOFMaterial"
}
export interface ObjectWithCustomMaterials extends Mesh {
customDepthDOFMaterial?: Material;
}
export interface MaterialWithCustomMaterials extends Material {
customMaterials: {
[key in CustomMaterialName]?: Material;
};
}
export interface ShaderMaterialWithCustomMaterials extends ShaderMaterial {
customMaterials: {
[key in CustomMaterialName]?: Material;
};
}
export interface MaterialWithSkinning extends Material {
skinning: boolean;
morphTargets: boolean;
}
import { WebGLRenderer } from 'three';
import { Scene } from 'three';
import { Camera } from 'three';
import { BufferGeometry } from 'three';
import { Group } from 'three';
import { ShaderAssemblerMaterial } from '../../engine/nodes/gl/code/assemblers/materials/_BaseMaterial';
import { IUniformTexture } from '../../engine/nodes/utils/code/gl/Uniforms';
export type RenderHook = (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group | null) => void;
export type RenderHookWithObject = (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group | null, // it's only 'Group', and not 'Group|null' in threejs types, but got null sometimes
object: Object3D) => void;
declare const RENDER_HOOK_USER_DATA_KEY = "POLY_render_hook";
interface MaterialWithRenderHook extends Material {
userData: {
[RENDER_HOOK_USER_DATA_KEY]?: RenderHookWithObject;
};
}
interface CloneOptions {
shareCustomUniforms: boolean;
addCustomMaterials: boolean;
}
export declare function cloneMaterial(scene: PolyScene, srcMaterial: Material | ShaderMaterial, options: CloneOptions): Material;
export declare function applyCustomMaterials(object: Object3D, material: Material): void;
export declare function addUserDataRenderHook(material: Material, renderHook: RenderHookWithObject): void;
export declare function applyRenderHook(object: Object3D, material: MaterialWithRenderHook): void;
export declare function assignUniforms(mat: Material, uniformName: string, uniform: IUniformTexture, assembler?: ShaderAssemblerMaterial): void;
export declare function assignUniformForOnBeforeCompile(mat: Material, uniformName: string, uniform: IUniformTexture, assembler: ShaderAssemblerMaterial): void;
export declare class CoreMaterial {
static node(scene: PolyScene, material: Material): import("../../engine/nodes/_Base").BaseNodeType | import("../../engine/nodes/manager/Root").RootManagerNode | null;
static clone: typeof cloneMaterial;
static applyCustomMaterials: typeof applyCustomMaterials;
static assignUniforms: typeof assignUniforms;
static assignUniformForOnBeforeCompile: typeof assignUniformForOnBeforeCompile;
}
export {};