123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import { SmartArray, SmartArrayNoDuplicate } from "../Misc/smartArray";
- import type { SubMesh } from "../Meshes/subMesh";
- import type { AbstractMesh } from "../Meshes/abstractMesh";
- import type { Nullable } from "../types";
- import type { IParticleSystem } from "../Particles/IParticleSystem";
- import type { IEdgesRenderer } from "./edgesRenderer";
- import type { ISpriteManager } from "../Sprites/spriteManager";
- import type { Material } from "../Materials/material";
- import type { Scene } from "../scene";
- /**
- * This represents the object necessary to create a rendering group.
- * This is exclusively used and created by the rendering manager.
- * To modify the behavior, you use the available helpers in your scene or meshes.
- * @internal
- */
- export declare class RenderingGroup {
- index: number;
- private static _ZeroVector;
- private _scene;
- private _opaqueSubMeshes;
- private _transparentSubMeshes;
- private _alphaTestSubMeshes;
- private _depthOnlySubMeshes;
- private _particleSystems;
- private _spriteManagers;
- private _opaqueSortCompareFn;
- private _alphaTestSortCompareFn;
- private _transparentSortCompareFn;
- private _renderOpaque;
- private _renderAlphaTest;
- private _renderTransparent;
- /** @internal */
- _empty: boolean;
- /** @internal */
- _edgesRenderers: SmartArrayNoDuplicate<IEdgesRenderer>;
- onBeforeTransparentRendering: () => void;
- /**
- * Set the opaque sort comparison function.
- * If null the sub meshes will be render in the order they were created
- */
- set opaqueSortCompareFn(value: Nullable<(a: SubMesh, b: SubMesh) => number>);
- /**
- * Set the alpha test sort comparison function.
- * If null the sub meshes will be render in the order they were created
- */
- set alphaTestSortCompareFn(value: Nullable<(a: SubMesh, b: SubMesh) => number>);
- /**
- * Set the transparent sort comparison function.
- * If null the sub meshes will be render in the order they were created
- */
- set transparentSortCompareFn(value: Nullable<(a: SubMesh, b: SubMesh) => number>);
- /**
- * Creates a new rendering group.
- * @param index The rendering group index
- * @param scene
- * @param opaqueSortCompareFn The opaque sort comparison function. If null no order is applied
- * @param alphaTestSortCompareFn The alpha test sort comparison function. If null no order is applied
- * @param transparentSortCompareFn The transparent sort comparison function. If null back to front + alpha index sort is applied
- */
- constructor(index: number, scene: Scene, opaqueSortCompareFn?: Nullable<(a: SubMesh, b: SubMesh) => number>, alphaTestSortCompareFn?: Nullable<(a: SubMesh, b: SubMesh) => number>, transparentSortCompareFn?: Nullable<(a: SubMesh, b: SubMesh) => number>);
- /**
- * Render all the sub meshes contained in the group.
- * @param customRenderFunction Used to override the default render behaviour of the group.
- * @param renderSprites
- * @param renderParticles
- * @param activeMeshes
- */
- render(customRenderFunction: Nullable<(opaqueSubMeshes: SmartArray<SubMesh>, transparentSubMeshes: SmartArray<SubMesh>, alphaTestSubMeshes: SmartArray<SubMesh>, depthOnlySubMeshes: SmartArray<SubMesh>) => void>, renderSprites: boolean, renderParticles: boolean, activeMeshes: Nullable<AbstractMesh[]>): void;
- /**
- * Renders the opaque submeshes in the order from the opaqueSortCompareFn.
- * @param subMeshes The submeshes to render
- */
- private _renderOpaqueSorted;
- /**
- * Renders the opaque submeshes in the order from the alphatestSortCompareFn.
- * @param subMeshes The submeshes to render
- */
- private _renderAlphaTestSorted;
- /**
- * Renders the opaque submeshes in the order from the transparentSortCompareFn.
- * @param subMeshes The submeshes to render
- */
- private _renderTransparentSorted;
- /**
- * Renders the submeshes in a specified order.
- * @param subMeshes The submeshes to sort before render
- * @param sortCompareFn The comparison function use to sort
- * @param camera The camera position use to preprocess the submeshes to help sorting
- * @param transparent Specifies to activate blending if true
- */
- private static _RenderSorted;
- /**
- * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)
- * are rendered back to front if in the same alpha index.
- *
- * @param a The first submesh
- * @param b The second submesh
- * @returns The result of the comparison
- */
- static defaultTransparentSortCompare(a: SubMesh, b: SubMesh): number;
- /**
- * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)
- * are rendered back to front.
- *
- * @param a The first submesh
- * @param b The second submesh
- * @returns The result of the comparison
- */
- static backToFrontSortCompare(a: SubMesh, b: SubMesh): number;
- /**
- * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)
- * are rendered front to back (prevent overdraw).
- *
- * @param a The first submesh
- * @param b The second submesh
- * @returns The result of the comparison
- */
- static frontToBackSortCompare(a: SubMesh, b: SubMesh): number;
- /**
- * Build in function which can be applied to ensure meshes of a special queue (opaque, alpha test, transparent)
- * are grouped by material then geometry.
- *
- * @param a The first submesh
- * @param b The second submesh
- * @returns The result of the comparison
- */
- static PainterSortCompare(a: SubMesh, b: SubMesh): number;
- /**
- * Resets the different lists of submeshes to prepare a new frame.
- */
- prepare(): void;
- /**
- * Resets the different lists of sprites to prepare a new frame.
- */
- prepareSprites(): void;
- dispose(): void;
- /**
- * Inserts the submesh in its correct queue depending on its material.
- * @param subMesh The submesh to dispatch
- * @param [mesh] Optional reference to the submeshes's mesh. Provide if you have an exiting reference to improve performance.
- * @param [material] Optional reference to the submeshes's material. Provide if you have an exiting reference to improve performance.
- */
- dispatch(subMesh: SubMesh, mesh?: AbstractMesh, material?: Nullable<Material>): void;
- dispatchSprites(spriteManager: ISpriteManager): void;
- dispatchParticles(particleSystem: IParticleSystem): void;
- private _renderParticles;
- private _renderSprites;
- }
|