1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /**
- * Configuration needed for prepass-capable materials
- */
- export class PrePassConfiguration {
- constructor() {
- /**
- * Previous world matrices of meshes carrying this material
- * Used for computing velocity
- */
- this.previousWorldMatrices = {};
- /**
- * Previous bones of meshes carrying this material
- * Used for computing velocity
- */
- this.previousBones = {};
- }
- /**
- * Add the required uniforms to the current list.
- * @param uniforms defines the current uniform list.
- */
- static AddUniforms(uniforms) {
- uniforms.push("previousWorld", "previousViewProjection", "mPreviousBones");
- }
- /**
- * Add the required samplers to the current list.
- * @param samplers defines the current sampler list.
- */
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- static AddSamplers(samplers) {
- // pass
- }
- /**
- * Binds the material data.
- * @param effect defines the effect to update
- * @param scene defines the scene the material belongs to.
- * @param mesh The mesh
- * @param world World matrix of this mesh
- * @param isFrozen Is the material frozen
- */
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- bindForSubMesh(effect, scene, mesh, world, isFrozen) {
- if (scene.prePassRenderer && scene.prePassRenderer.enabled && scene.prePassRenderer.currentRTisSceneRT) {
- if (scene.prePassRenderer.getIndex(2) !== -1) {
- if (!this.previousWorldMatrices[mesh.uniqueId]) {
- this.previousWorldMatrices[mesh.uniqueId] = world.clone();
- }
- if (!this.previousViewProjection) {
- this.previousViewProjection = scene.getTransformMatrix().clone();
- this.currentViewProjection = scene.getTransformMatrix().clone();
- }
- const engine = scene.getEngine();
- if (this.currentViewProjection.updateFlag !== scene.getTransformMatrix().updateFlag) {
- // First update of the prepass configuration for this rendering pass
- this._lastUpdateFrameId = engine.frameId;
- this.previousViewProjection.copyFrom(this.currentViewProjection);
- this.currentViewProjection.copyFrom(scene.getTransformMatrix());
- }
- else if (this._lastUpdateFrameId !== engine.frameId) {
- // The scene transformation did not change from the previous frame (so no camera motion), we must update previousViewProjection accordingly
- this._lastUpdateFrameId = engine.frameId;
- this.previousViewProjection.copyFrom(this.currentViewProjection);
- }
- effect.setMatrix("previousWorld", this.previousWorldMatrices[mesh.uniqueId]);
- effect.setMatrix("previousViewProjection", this.previousViewProjection);
- this.previousWorldMatrices[mesh.uniqueId] = world.clone();
- }
- }
- }
- }
- //# sourceMappingURL=prePassConfiguration.js.map
|