@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
149 lines (148 loc) • 6.72 kB
TypeScript
import { SmartArray, SmartArrayNoDuplicate } from "../Misc/smartArray.js";
import type { SubMesh } from "../Meshes/subMesh.js";
import type { AbstractMesh } from "../Meshes/abstractMesh.js";
import type { Nullable } from "../types.js";
import type { IParticleSystem } from "../Particles/IParticleSystem.js";
import type { IEdgesRenderer } from "./edgesRenderer.js";
import type { ISpriteManager } from "../Sprites/spriteManager.js";
import type { Material } from "../Materials/material.js";
import type { Scene } from "../scene.js";
/**
* 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;
}