UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

69 lines (68 loc) 3.31 kB
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 {};