@babylonjs/core 7.47.1 → 7.47.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,3 @@
1
- import type { PerfCounter } from "../../Misc/perfCounter";
2
1
  import type { Nullable } from "../../types";
3
2
  /** @internal */
4
3
  export type OcclusionQuery = WebGLQuery | number;
@@ -21,16 +20,6 @@ export declare class _OcclusionDataStorage {
21
20
  }
22
21
  declare module "../../Engines/abstractEngine" {
23
22
  interface AbstractEngine {
24
- /**
25
- * Get the performance counter associated with the frame time computation
26
- * @returns the perf counter
27
- */
28
- getGPUFrameTimeCounter(): Nullable<PerfCounter>;
29
- /**
30
- * Enable or disable the GPU frame time capture
31
- * @param value True to enable, false to disable
32
- */
33
- captureGPUFrameTime(value: boolean): void;
34
23
  /**
35
24
  * Create a new webGL query (you must be sure that queries are supported by checking getCaps() function)
36
25
  * @returns the new query
@@ -20,12 +20,6 @@ export class _OcclusionDataStorage {
20
20
  this.forceRenderingWhenOccluded = false;
21
21
  }
22
22
  }
23
- AbstractEngine.prototype.getGPUFrameTimeCounter = function () {
24
- return null;
25
- };
26
- AbstractEngine.prototype.captureGPUFrameTime = function (value) {
27
- // Do nothing. Must be implemented by child classes
28
- };
29
23
  AbstractEngine.prototype.createQuery = function () {
30
24
  return null;
31
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"abstractEngine.query.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.query.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { PerfCounter } from \"../../Misc/perfCounter\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { AbstractEngine } from \"../abstractEngine\";\r\n\r\n/** @internal */\r\nexport type OcclusionQuery = WebGLQuery | number;\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _OcclusionDataStorage {\r\n /** @internal */\r\n public occlusionInternalRetryCounter = 0;\r\n\r\n /** @internal */\r\n public isOcclusionQueryInProgress = false;\r\n\r\n /** @internal */\r\n public isOccluded = false;\r\n\r\n /** @internal */\r\n public occlusionRetryCount = -1;\r\n\r\n /** @internal */\r\n public occlusionType = AbstractMesh.OCCLUSION_TYPE_NONE;\r\n\r\n /** @internal */\r\n public occlusionQueryAlgorithmType = AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE;\r\n\r\n /** @internal */\r\n public forceRenderingWhenOccluded = false;\r\n}\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n export interface AbstractEngine {\r\n /**\r\n * Get the performance counter associated with the frame time computation\r\n * @returns the perf counter\r\n */\r\n getGPUFrameTimeCounter(): Nullable<PerfCounter>;\r\n\r\n /**\r\n * Enable or disable the GPU frame time capture\r\n * @param value True to enable, false to disable\r\n */\r\n captureGPUFrameTime(value: boolean): void;\r\n /**\r\n * Create a new webGL query (you must be sure that queries are supported by checking getCaps() function)\r\n * @returns the new query\r\n */\r\n createQuery(): Nullable<OcclusionQuery>;\r\n /**\r\n * Delete and release a webGL query\r\n * @param query defines the query to delete\r\n * @returns the current engine\r\n */\r\n deleteQuery(query: OcclusionQuery): AbstractEngine /**\r\n * Check if a given query has resolved and got its value\r\n * @param query defines the query to check\r\n * @returns true if the query got its value\r\n */;\r\n isQueryResultAvailable(query: OcclusionQuery): boolean;\r\n /**\r\n * Gets the value of a given query\r\n * @param query defines the query to check\r\n * @returns the value of the query\r\n */\r\n getQueryResult(query: OcclusionQuery): number;\r\n /**\r\n * Initiates an occlusion query\r\n * @param algorithmType defines the algorithm to use\r\n * @param query defines the query to use\r\n * @returns the current engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n beginOcclusionQuery(algorithmType: number, query: OcclusionQuery): boolean;\r\n /**\r\n * Ends an occlusion query\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n * @param algorithmType defines the algorithm to use\r\n * @returns the current engine\r\n */\r\n endOcclusionQuery(algorithmType: number): AbstractEngine;\r\n }\r\n}\r\nAbstractEngine.prototype.getGPUFrameTimeCounter = function (): Nullable<PerfCounter> {\r\n return null;\r\n};\r\n\r\nAbstractEngine.prototype.captureGPUFrameTime = function (value: boolean): void {\r\n // Do nothing. Must be implemented by child classes\r\n};\r\n\r\nAbstractEngine.prototype.createQuery = function (): Nullable<OcclusionQuery> {\r\n return null;\r\n};\r\n\r\nAbstractEngine.prototype.deleteQuery = function (query: OcclusionQuery): AbstractEngine {\r\n // Do nothing. Must be implemented by child classes\r\n return this;\r\n};\r\n\r\nAbstractEngine.prototype.isQueryResultAvailable = function (query: OcclusionQuery): boolean {\r\n // Do nothing. Must be implemented by child classes\r\n return false;\r\n};\r\n\r\nAbstractEngine.prototype.getQueryResult = function (query: OcclusionQuery): number {\r\n // Do nothing. Must be implemented by child classes\r\n return 0;\r\n};\r\n\r\nAbstractEngine.prototype.beginOcclusionQuery = function (algorithmType: number, query: OcclusionQuery): boolean {\r\n // Do nothing. Must be implemented by child classes\r\n return false;\r\n};\r\n\r\nAbstractEngine.prototype.endOcclusionQuery = function (algorithmType: number): AbstractEngine {\r\n // Do nothing. Must be implemented by child classes\r\n return this;\r\n};\r\n\r\ndeclare module \"../../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /**\r\n * Backing filed\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n __occlusionDataStorage: _OcclusionDataStorage;\r\n\r\n /**\r\n * Access property\r\n * @internal\r\n */\r\n _occlusionDataStorage: _OcclusionDataStorage;\r\n\r\n /**\r\n * This number indicates the number of allowed retries before stop the occlusion query, this is useful if the occlusion query is taking long time before to the query result is retrieved, the query result indicates if the object is visible within the scene or not and based on that Babylon.Js engine decides to show or hide the object.\r\n * The default value is -1 which means don't break the query and wait till the result\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n occlusionRetryCount: number;\r\n\r\n /**\r\n * This property is responsible for starting the occlusion query within the Mesh or not, this property is also used to determine what should happen when the occlusionRetryCount is reached. It has supports 3 values:\r\n * * OCCLUSION_TYPE_NONE (Default Value): this option means no occlusion query within the Mesh.\r\n * * OCCLUSION_TYPE_OPTIMISTIC: this option is means use occlusion query and if occlusionRetryCount is reached and the query is broken show the mesh.\r\n * * OCCLUSION_TYPE_STRICT: this option is means use occlusion query and if occlusionRetryCount is reached and the query is broken restore the last state of the mesh occlusion if the mesh was visible then show the mesh if was hidden then hide don't show.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n occlusionType: number;\r\n\r\n /**\r\n * This property determines the type of occlusion query algorithm to run in WebGl, you can use:\r\n * * AbstractMesh.OCCLUSION_ALGORITHM_TYPE_ACCURATE which is mapped to GL_ANY_SAMPLES_PASSED.\r\n * * AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE (Default Value) which is mapped to GL_ANY_SAMPLES_PASSED_CONSERVATIVE which is a false positive algorithm that is faster than GL_ANY_SAMPLES_PASSED but less accurate.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n occlusionQueryAlgorithmType: number;\r\n\r\n /**\r\n * Gets or sets whether the mesh is occluded or not, it is used also to set the initial state of the mesh to be occluded or not\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n isOccluded: boolean;\r\n\r\n /**\r\n * Flag to check the progress status of the query\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n isOcclusionQueryInProgress: boolean;\r\n\r\n /**\r\n * Flag to force rendering the mesh even if occluded\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n forceRenderingWhenOccluded: boolean;\r\n }\r\n}\r\nObject.defineProperty(AbstractMesh.prototype, \"isOcclusionQueryInProgress\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.isOcclusionQueryInProgress;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._occlusionDataStorage.isOcclusionQueryInProgress = value;\r\n },\r\n enumerable: false,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"_occlusionDataStorage\", {\r\n get: function (this: AbstractMesh) {\r\n if (!this.__occlusionDataStorage) {\r\n this.__occlusionDataStorage = new _OcclusionDataStorage();\r\n }\r\n return this.__occlusionDataStorage;\r\n },\r\n enumerable: false,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"isOccluded\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.isOccluded;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._occlusionDataStorage.isOccluded = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"occlusionQueryAlgorithmType\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.occlusionQueryAlgorithmType;\r\n },\r\n set: function (this: AbstractMesh, value: number) {\r\n this._occlusionDataStorage.occlusionQueryAlgorithmType = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"occlusionType\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.occlusionType;\r\n },\r\n set: function (this: AbstractMesh, value: number) {\r\n this._occlusionDataStorage.occlusionType = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"occlusionRetryCount\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.occlusionRetryCount;\r\n },\r\n set: function (this: AbstractMesh, value: number) {\r\n this._occlusionDataStorage.occlusionRetryCount = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"forceRenderingWhenOccluded\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.forceRenderingWhenOccluded;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._occlusionDataStorage.forceRenderingWhenOccluded = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n// We also need to update AbstractMesh as there is a portion of the code there\r\nAbstractMesh.prototype._checkOcclusionQuery = function () {\r\n const dataStorage = this._occlusionDataStorage;\r\n\r\n if (dataStorage.occlusionType === AbstractMesh.OCCLUSION_TYPE_NONE) {\r\n dataStorage.isOccluded = false;\r\n return false;\r\n }\r\n\r\n const engine = this.getEngine();\r\n\r\n if (!engine.getCaps().supportOcclusionQuery) {\r\n dataStorage.isOccluded = false;\r\n return false;\r\n }\r\n\r\n if (!engine.isQueryResultAvailable) {\r\n // Occlusion query where not referenced\r\n dataStorage.isOccluded = false;\r\n return false;\r\n }\r\n\r\n if (this.isOcclusionQueryInProgress && this._occlusionQuery !== null && this._occlusionQuery !== undefined) {\r\n const isOcclusionQueryAvailable = engine.isQueryResultAvailable(this._occlusionQuery);\r\n if (isOcclusionQueryAvailable) {\r\n const occlusionQueryResult = engine.getQueryResult(this._occlusionQuery);\r\n\r\n dataStorage.isOcclusionQueryInProgress = false;\r\n dataStorage.occlusionInternalRetryCounter = 0;\r\n dataStorage.isOccluded = occlusionQueryResult > 0 ? false : true;\r\n } else {\r\n dataStorage.occlusionInternalRetryCounter++;\r\n\r\n if (dataStorage.occlusionRetryCount !== -1 && dataStorage.occlusionInternalRetryCounter > dataStorage.occlusionRetryCount) {\r\n dataStorage.isOcclusionQueryInProgress = false;\r\n dataStorage.occlusionInternalRetryCounter = 0;\r\n\r\n // if optimistic set isOccluded to false regardless of the status of isOccluded. (Render in the current render loop)\r\n // if strict continue the last state of the object.\r\n dataStorage.isOccluded = dataStorage.occlusionType === AbstractMesh.OCCLUSION_TYPE_OPTIMISTIC ? false : dataStorage.isOccluded;\r\n } else {\r\n return dataStorage.occlusionType === AbstractMesh.OCCLUSION_TYPE_OPTIMISTIC ? false : dataStorage.isOccluded;\r\n }\r\n }\r\n }\r\n\r\n const scene = this.getScene();\r\n if (scene.getBoundingBoxRenderer) {\r\n const occlusionBoundingBoxRenderer = scene.getBoundingBoxRenderer();\r\n\r\n if (this._occlusionQuery === null) {\r\n this._occlusionQuery = engine.createQuery();\r\n }\r\n\r\n if (this._occlusionQuery && engine.beginOcclusionQuery(dataStorage.occlusionQueryAlgorithmType, this._occlusionQuery)) {\r\n occlusionBoundingBoxRenderer.renderOcclusionBoundingBox(this);\r\n engine.endOcclusionQuery(dataStorage.occlusionQueryAlgorithmType);\r\n this._occlusionDataStorage.isOcclusionQueryInProgress = true;\r\n }\r\n }\r\n\r\n return dataStorage.isOccluded;\r\n};\r\n"]}
1
+ {"version":3,"file":"abstractEngine.query.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.query.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { AbstractEngine } from \"../abstractEngine\";\r\n\r\n/** @internal */\r\nexport type OcclusionQuery = WebGLQuery | number;\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class _OcclusionDataStorage {\r\n /** @internal */\r\n public occlusionInternalRetryCounter = 0;\r\n\r\n /** @internal */\r\n public isOcclusionQueryInProgress = false;\r\n\r\n /** @internal */\r\n public isOccluded = false;\r\n\r\n /** @internal */\r\n public occlusionRetryCount = -1;\r\n\r\n /** @internal */\r\n public occlusionType = AbstractMesh.OCCLUSION_TYPE_NONE;\r\n\r\n /** @internal */\r\n public occlusionQueryAlgorithmType = AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE;\r\n\r\n /** @internal */\r\n public forceRenderingWhenOccluded = false;\r\n}\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n export interface AbstractEngine {\r\n /**\r\n * Create a new webGL query (you must be sure that queries are supported by checking getCaps() function)\r\n * @returns the new query\r\n */\r\n createQuery(): Nullable<OcclusionQuery>;\r\n /**\r\n * Delete and release a webGL query\r\n * @param query defines the query to delete\r\n * @returns the current engine\r\n */\r\n deleteQuery(query: OcclusionQuery): AbstractEngine /**\r\n * Check if a given query has resolved and got its value\r\n * @param query defines the query to check\r\n * @returns true if the query got its value\r\n */;\r\n isQueryResultAvailable(query: OcclusionQuery): boolean;\r\n /**\r\n * Gets the value of a given query\r\n * @param query defines the query to check\r\n * @returns the value of the query\r\n */\r\n getQueryResult(query: OcclusionQuery): number;\r\n /**\r\n * Initiates an occlusion query\r\n * @param algorithmType defines the algorithm to use\r\n * @param query defines the query to use\r\n * @returns the current engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n beginOcclusionQuery(algorithmType: number, query: OcclusionQuery): boolean;\r\n /**\r\n * Ends an occlusion query\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n * @param algorithmType defines the algorithm to use\r\n * @returns the current engine\r\n */\r\n endOcclusionQuery(algorithmType: number): AbstractEngine;\r\n }\r\n}\r\n\r\nAbstractEngine.prototype.createQuery = function (): Nullable<OcclusionQuery> {\r\n return null;\r\n};\r\n\r\nAbstractEngine.prototype.deleteQuery = function (query: OcclusionQuery): AbstractEngine {\r\n // Do nothing. Must be implemented by child classes\r\n return this;\r\n};\r\n\r\nAbstractEngine.prototype.isQueryResultAvailable = function (query: OcclusionQuery): boolean {\r\n // Do nothing. Must be implemented by child classes\r\n return false;\r\n};\r\n\r\nAbstractEngine.prototype.getQueryResult = function (query: OcclusionQuery): number {\r\n // Do nothing. Must be implemented by child classes\r\n return 0;\r\n};\r\n\r\nAbstractEngine.prototype.beginOcclusionQuery = function (algorithmType: number, query: OcclusionQuery): boolean {\r\n // Do nothing. Must be implemented by child classes\r\n return false;\r\n};\r\n\r\nAbstractEngine.prototype.endOcclusionQuery = function (algorithmType: number): AbstractEngine {\r\n // Do nothing. Must be implemented by child classes\r\n return this;\r\n};\r\n\r\ndeclare module \"../../Meshes/abstractMesh\" {\r\n export interface AbstractMesh {\r\n /**\r\n * Backing filed\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n __occlusionDataStorage: _OcclusionDataStorage;\r\n\r\n /**\r\n * Access property\r\n * @internal\r\n */\r\n _occlusionDataStorage: _OcclusionDataStorage;\r\n\r\n /**\r\n * This number indicates the number of allowed retries before stop the occlusion query, this is useful if the occlusion query is taking long time before to the query result is retrieved, the query result indicates if the object is visible within the scene or not and based on that Babylon.Js engine decides to show or hide the object.\r\n * The default value is -1 which means don't break the query and wait till the result\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n occlusionRetryCount: number;\r\n\r\n /**\r\n * This property is responsible for starting the occlusion query within the Mesh or not, this property is also used to determine what should happen when the occlusionRetryCount is reached. It has supports 3 values:\r\n * * OCCLUSION_TYPE_NONE (Default Value): this option means no occlusion query within the Mesh.\r\n * * OCCLUSION_TYPE_OPTIMISTIC: this option is means use occlusion query and if occlusionRetryCount is reached and the query is broken show the mesh.\r\n * * OCCLUSION_TYPE_STRICT: this option is means use occlusion query and if occlusionRetryCount is reached and the query is broken restore the last state of the mesh occlusion if the mesh was visible then show the mesh if was hidden then hide don't show.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n occlusionType: number;\r\n\r\n /**\r\n * This property determines the type of occlusion query algorithm to run in WebGl, you can use:\r\n * * AbstractMesh.OCCLUSION_ALGORITHM_TYPE_ACCURATE which is mapped to GL_ANY_SAMPLES_PASSED.\r\n * * AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE (Default Value) which is mapped to GL_ANY_SAMPLES_PASSED_CONSERVATIVE which is a false positive algorithm that is faster than GL_ANY_SAMPLES_PASSED but less accurate.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n occlusionQueryAlgorithmType: number;\r\n\r\n /**\r\n * Gets or sets whether the mesh is occluded or not, it is used also to set the initial state of the mesh to be occluded or not\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n isOccluded: boolean;\r\n\r\n /**\r\n * Flag to check the progress status of the query\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n isOcclusionQueryInProgress: boolean;\r\n\r\n /**\r\n * Flag to force rendering the mesh even if occluded\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/occlusionQueries\r\n */\r\n forceRenderingWhenOccluded: boolean;\r\n }\r\n}\r\nObject.defineProperty(AbstractMesh.prototype, \"isOcclusionQueryInProgress\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.isOcclusionQueryInProgress;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._occlusionDataStorage.isOcclusionQueryInProgress = value;\r\n },\r\n enumerable: false,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"_occlusionDataStorage\", {\r\n get: function (this: AbstractMesh) {\r\n if (!this.__occlusionDataStorage) {\r\n this.__occlusionDataStorage = new _OcclusionDataStorage();\r\n }\r\n return this.__occlusionDataStorage;\r\n },\r\n enumerable: false,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"isOccluded\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.isOccluded;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._occlusionDataStorage.isOccluded = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"occlusionQueryAlgorithmType\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.occlusionQueryAlgorithmType;\r\n },\r\n set: function (this: AbstractMesh, value: number) {\r\n this._occlusionDataStorage.occlusionQueryAlgorithmType = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"occlusionType\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.occlusionType;\r\n },\r\n set: function (this: AbstractMesh, value: number) {\r\n this._occlusionDataStorage.occlusionType = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"occlusionRetryCount\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.occlusionRetryCount;\r\n },\r\n set: function (this: AbstractMesh, value: number) {\r\n this._occlusionDataStorage.occlusionRetryCount = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\nObject.defineProperty(AbstractMesh.prototype, \"forceRenderingWhenOccluded\", {\r\n get: function (this: AbstractMesh) {\r\n return this._occlusionDataStorage.forceRenderingWhenOccluded;\r\n },\r\n set: function (this: AbstractMesh, value: boolean) {\r\n this._occlusionDataStorage.forceRenderingWhenOccluded = value;\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n});\r\n\r\n// We also need to update AbstractMesh as there is a portion of the code there\r\nAbstractMesh.prototype._checkOcclusionQuery = function () {\r\n const dataStorage = this._occlusionDataStorage;\r\n\r\n if (dataStorage.occlusionType === AbstractMesh.OCCLUSION_TYPE_NONE) {\r\n dataStorage.isOccluded = false;\r\n return false;\r\n }\r\n\r\n const engine = this.getEngine();\r\n\r\n if (!engine.getCaps().supportOcclusionQuery) {\r\n dataStorage.isOccluded = false;\r\n return false;\r\n }\r\n\r\n if (!engine.isQueryResultAvailable) {\r\n // Occlusion query where not referenced\r\n dataStorage.isOccluded = false;\r\n return false;\r\n }\r\n\r\n if (this.isOcclusionQueryInProgress && this._occlusionQuery !== null && this._occlusionQuery !== undefined) {\r\n const isOcclusionQueryAvailable = engine.isQueryResultAvailable(this._occlusionQuery);\r\n if (isOcclusionQueryAvailable) {\r\n const occlusionQueryResult = engine.getQueryResult(this._occlusionQuery);\r\n\r\n dataStorage.isOcclusionQueryInProgress = false;\r\n dataStorage.occlusionInternalRetryCounter = 0;\r\n dataStorage.isOccluded = occlusionQueryResult > 0 ? false : true;\r\n } else {\r\n dataStorage.occlusionInternalRetryCounter++;\r\n\r\n if (dataStorage.occlusionRetryCount !== -1 && dataStorage.occlusionInternalRetryCounter > dataStorage.occlusionRetryCount) {\r\n dataStorage.isOcclusionQueryInProgress = false;\r\n dataStorage.occlusionInternalRetryCounter = 0;\r\n\r\n // if optimistic set isOccluded to false regardless of the status of isOccluded. (Render in the current render loop)\r\n // if strict continue the last state of the object.\r\n dataStorage.isOccluded = dataStorage.occlusionType === AbstractMesh.OCCLUSION_TYPE_OPTIMISTIC ? false : dataStorage.isOccluded;\r\n } else {\r\n return dataStorage.occlusionType === AbstractMesh.OCCLUSION_TYPE_OPTIMISTIC ? false : dataStorage.isOccluded;\r\n }\r\n }\r\n }\r\n\r\n const scene = this.getScene();\r\n if (scene.getBoundingBoxRenderer) {\r\n const occlusionBoundingBoxRenderer = scene.getBoundingBoxRenderer();\r\n\r\n if (this._occlusionQuery === null) {\r\n this._occlusionQuery = engine.createQuery();\r\n }\r\n\r\n if (this._occlusionQuery && engine.beginOcclusionQuery(dataStorage.occlusionQueryAlgorithmType, this._occlusionQuery)) {\r\n occlusionBoundingBoxRenderer.renderOcclusionBoundingBox(this);\r\n engine.endOcclusionQuery(dataStorage.occlusionQueryAlgorithmType);\r\n this._occlusionDataStorage.isOcclusionQueryInProgress = true;\r\n }\r\n }\r\n\r\n return dataStorage.isOccluded;\r\n};\r\n"]}
@@ -0,0 +1,18 @@
1
+ import { PerfCounter } from "../../Misc/perfCounter";
2
+ import type { Nullable } from "../../types";
3
+ declare module "../../Engines/abstractEngine" {
4
+ interface AbstractEngine {
5
+ /** @internal */
6
+ _gpuFrameTime: Nullable<PerfCounter>;
7
+ /**
8
+ * Get the performance counter associated with the frame time computation
9
+ * @returns the perf counter
10
+ */
11
+ getGPUFrameTimeCounter(): PerfCounter;
12
+ /**
13
+ * Enable or disable the GPU frame time capture
14
+ * @param value True to enable, false to disable
15
+ */
16
+ captureGPUFrameTime(value: boolean): void;
17
+ }
18
+ }
@@ -0,0 +1,12 @@
1
+ import { AbstractEngine } from "../abstractEngine.js";
2
+ import { PerfCounter } from "../../Misc/perfCounter.js";
3
+ AbstractEngine.prototype.getGPUFrameTimeCounter = function () {
4
+ if (!this._gpuFrameTime) {
5
+ this._gpuFrameTime = new PerfCounter();
6
+ }
7
+ return this._gpuFrameTime;
8
+ };
9
+ AbstractEngine.prototype.captureGPUFrameTime = function (value) {
10
+ // Do nothing. Must be implemented by child classes
11
+ };
12
+ //# sourceMappingURL=abstractEngine.timeQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstractEngine.timeQuery.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/abstractEngine.timeQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAoBrD,cAAc,CAAC,SAAS,CAAC,sBAAsB,GAAG;IAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC,aAAa,CAAC;AAC9B,CAAC,CAAC;AAEF,cAAc,CAAC,SAAS,CAAC,mBAAmB,GAAG,UAAU,KAAc;IACnE,mDAAmD;AACvD,CAAC,CAAC","sourcesContent":["import { AbstractEngine } from \"../abstractEngine\";\r\nimport { PerfCounter } from \"../../Misc/perfCounter\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\ndeclare module \"../../Engines/abstractEngine\" {\r\n export interface AbstractEngine {\r\n /** @internal */\r\n _gpuFrameTime: Nullable<PerfCounter>;\r\n /**\r\n * Get the performance counter associated with the frame time computation\r\n * @returns the perf counter\r\n */\r\n getGPUFrameTimeCounter(): PerfCounter;\r\n /**\r\n * Enable or disable the GPU frame time capture\r\n * @param value True to enable, false to disable\r\n */\r\n captureGPUFrameTime(value: boolean): void;\r\n }\r\n}\r\n\r\nAbstractEngine.prototype.getGPUFrameTimeCounter = function () {\r\n if (!this._gpuFrameTime) {\r\n this._gpuFrameTime = new PerfCounter();\r\n }\r\n return this._gpuFrameTime;\r\n};\r\n\r\nAbstractEngine.prototype.captureGPUFrameTime = function (value: boolean): void {\r\n // Do nothing. Must be implemented by child classes\r\n};\r\n"]}
@@ -2,6 +2,7 @@ export * from "./abstractEngine.cubeTexture";
2
2
  export * from "./abstractEngine.loadingScreen";
3
3
  export * from "./abstractEngine.dom";
4
4
  export * from "./abstractEngine.states";
5
+ export * from "./abstractEngine.timeQuery";
5
6
  export * from "./abstractEngine.query";
6
7
  export * from "./abstractEngine.renderPass";
7
8
  export * from "./abstractEngine.texture";
@@ -3,6 +3,7 @@ export * from "./abstractEngine.cubeTexture.js";
3
3
  export * from "./abstractEngine.loadingScreen.js";
4
4
  export * from "./abstractEngine.dom.js";
5
5
  export * from "./abstractEngine.states.js";
6
+ export * from "./abstractEngine.timeQuery.js";
6
7
  export * from "./abstractEngine.query.js";
7
8
  export * from "./abstractEngine.renderPass.js";
8
9
  export * from "./abstractEngine.texture.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC","sourcesContent":["/* eslint-disable import/export */\r\nexport * from \"./abstractEngine.cubeTexture\";\r\nexport * from \"./abstractEngine.loadingScreen\";\r\nexport * from \"./abstractEngine.dom\";\r\nexport * from \"./abstractEngine.states\";\r\nexport * from \"./abstractEngine.query\";\r\nexport * from \"./abstractEngine.renderPass\";\r\nexport * from \"./abstractEngine.texture\";\r\nexport * from \"./abstractEngine.alpha\";\r\nexport * from \"./abstractEngine.views\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/AbstractEngine/index.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC","sourcesContent":["/* eslint-disable import/export */\r\nexport * from \"./abstractEngine.cubeTexture\";\r\nexport * from \"./abstractEngine.loadingScreen\";\r\nexport * from \"./abstractEngine.dom\";\r\nexport * from \"./abstractEngine.states\";\r\nexport * from \"./abstractEngine.timeQuery\";\r\nexport * from \"./abstractEngine.query\";\r\nexport * from \"./abstractEngine.renderPass\";\r\nexport * from \"./abstractEngine.texture\";\r\nexport * from \"./abstractEngine.alpha\";\r\nexport * from \"./abstractEngine.views\";\r\n"]}
@@ -1,11 +1,15 @@
1
1
  import type { Nullable, int } from "../../types";
2
2
  import { _TimeToken } from "../../Instrumentation/timeToken";
3
- import { PerfCounter } from "../../Misc/perfCounter";
4
3
  import type { Observer } from "../../Misc/observable";
5
4
  import type { AbstractEngine } from "../abstractEngine";
5
+ import "../AbstractEngine/abstractEngine.timeQuery";
6
6
  import "../AbstractEngine/abstractEngine.query";
7
- declare module "../../Engines/engine" {
8
- interface Engine {
7
+ declare module "../../Engines/thinEngine" {
8
+ interface ThinEngine {
9
+ /**
10
+ * @internal
11
+ */
12
+ _captureGPUFrameTime: boolean;
9
13
  /**
10
14
  * Starts a time query (used to measure time spent by the GPU on a specific frame)
11
15
  * Please note that only one query can be issued at a time
@@ -21,12 +25,8 @@ declare module "../../Engines/engine" {
21
25
  /** @internal */
22
26
  _currentNonTimestampToken: Nullable<_TimeToken>;
23
27
  /** @internal */
24
- _captureGPUFrameTime: boolean;
25
- /** @internal */
26
28
  _gpuFrameTimeToken: Nullable<_TimeToken>;
27
29
  /** @internal */
28
- _gpuFrameTime: PerfCounter;
29
- /** @internal */
30
30
  _onBeginFrameObserver: Nullable<Observer<AbstractEngine>>;
31
31
  /** @internal */
32
32
  _onEndFrameObserver: Nullable<Observer<AbstractEngine>>;
@@ -1,43 +1,43 @@
1
- import { Engine } from "../../Engines/engine.js";
1
+ import { ThinEngine } from "../../Engines/thinEngine.js";
2
2
  import { AbstractMesh } from "../../Meshes/abstractMesh.js";
3
3
  import { _TimeToken } from "../../Instrumentation/timeToken.js";
4
- import { PerfCounter } from "../../Misc/perfCounter.js";
4
+ import "../AbstractEngine/abstractEngine.timeQuery.js";
5
5
  import "../AbstractEngine/abstractEngine.query.js";
6
- Engine.prototype.createQuery = function () {
6
+ ThinEngine.prototype.createQuery = function () {
7
7
  const query = this._gl.createQuery();
8
8
  if (!query) {
9
9
  throw new Error("Unable to create Occlusion Query");
10
10
  }
11
11
  return query;
12
12
  };
13
- Engine.prototype.deleteQuery = function (query) {
13
+ ThinEngine.prototype.deleteQuery = function (query) {
14
14
  this._gl.deleteQuery(query);
15
15
  return this;
16
16
  };
17
- Engine.prototype.isQueryResultAvailable = function (query) {
17
+ ThinEngine.prototype.isQueryResultAvailable = function (query) {
18
18
  return this._gl.getQueryParameter(query, this._gl.QUERY_RESULT_AVAILABLE);
19
19
  };
20
- Engine.prototype.getQueryResult = function (query) {
20
+ ThinEngine.prototype.getQueryResult = function (query) {
21
21
  return this._gl.getQueryParameter(query, this._gl.QUERY_RESULT);
22
22
  };
23
- Engine.prototype.beginOcclusionQuery = function (algorithmType, query) {
23
+ ThinEngine.prototype.beginOcclusionQuery = function (algorithmType, query) {
24
24
  const glAlgorithm = this._getGlAlgorithmType(algorithmType);
25
25
  this._gl.beginQuery(glAlgorithm, query);
26
26
  return true;
27
27
  };
28
- Engine.prototype.endOcclusionQuery = function (algorithmType) {
28
+ ThinEngine.prototype.endOcclusionQuery = function (algorithmType) {
29
29
  const glAlgorithm = this._getGlAlgorithmType(algorithmType);
30
30
  this._gl.endQuery(glAlgorithm);
31
31
  return this;
32
32
  };
33
- Engine.prototype._createTimeQuery = function () {
33
+ ThinEngine.prototype._createTimeQuery = function () {
34
34
  const timerQuery = this.getCaps().timerQuery;
35
35
  if (timerQuery.createQueryEXT) {
36
36
  return timerQuery.createQueryEXT();
37
37
  }
38
38
  return this.createQuery();
39
39
  };
40
- Engine.prototype._deleteTimeQuery = function (query) {
40
+ ThinEngine.prototype._deleteTimeQuery = function (query) {
41
41
  const timerQuery = this.getCaps().timerQuery;
42
42
  if (timerQuery.deleteQueryEXT) {
43
43
  timerQuery.deleteQueryEXT(query);
@@ -45,21 +45,21 @@ Engine.prototype._deleteTimeQuery = function (query) {
45
45
  }
46
46
  this.deleteQuery(query);
47
47
  };
48
- Engine.prototype._getTimeQueryResult = function (query) {
48
+ ThinEngine.prototype._getTimeQueryResult = function (query) {
49
49
  const timerQuery = this.getCaps().timerQuery;
50
50
  if (timerQuery.getQueryObjectEXT) {
51
51
  return timerQuery.getQueryObjectEXT(query, timerQuery.QUERY_RESULT_EXT);
52
52
  }
53
53
  return this.getQueryResult(query);
54
54
  };
55
- Engine.prototype._getTimeQueryAvailability = function (query) {
55
+ ThinEngine.prototype._getTimeQueryAvailability = function (query) {
56
56
  const timerQuery = this.getCaps().timerQuery;
57
57
  if (timerQuery.getQueryObjectEXT) {
58
58
  return timerQuery.getQueryObjectEXT(query, timerQuery.QUERY_RESULT_AVAILABLE_EXT);
59
59
  }
60
60
  return this.isQueryResultAvailable(query);
61
61
  };
62
- Engine.prototype.startTimeQuery = function () {
62
+ ThinEngine.prototype.startTimeQuery = function () {
63
63
  const caps = this.getCaps();
64
64
  const timerQuery = caps.timerQuery;
65
65
  if (!timerQuery) {
@@ -90,7 +90,7 @@ Engine.prototype.startTimeQuery = function () {
90
90
  }
91
91
  return token;
92
92
  };
93
- Engine.prototype.endTimeQuery = function (token) {
93
+ ThinEngine.prototype.endTimeQuery = function (token) {
94
94
  const caps = this.getCaps();
95
95
  const timerQuery = caps.timerQuery;
96
96
  if (!timerQuery || !token) {
@@ -155,17 +155,13 @@ Engine.prototype.endTimeQuery = function (token) {
155
155
  }
156
156
  return -1;
157
157
  };
158
- Engine.prototype._captureGPUFrameTime = false;
159
- Engine.prototype._gpuFrameTime = new PerfCounter();
160
- Engine.prototype.getGPUFrameTimeCounter = function () {
161
- return this._gpuFrameTime;
162
- };
163
- Engine.prototype.captureGPUFrameTime = function (value) {
158
+ ThinEngine.prototype.captureGPUFrameTime = function (value) {
164
159
  if (value === this._captureGPUFrameTime) {
165
160
  return;
166
161
  }
167
162
  this._captureGPUFrameTime = value;
168
163
  if (value) {
164
+ const gpuFrameTime = this.getGPUFrameTimeCounter();
169
165
  this._onBeginFrameObserver = this.onBeginFrameObservable.add(() => {
170
166
  if (!this._gpuFrameTimeToken) {
171
167
  this._gpuFrameTimeToken = this.startTimeQuery();
@@ -178,8 +174,8 @@ Engine.prototype.captureGPUFrameTime = function (value) {
178
174
  const time = this.endTimeQuery(this._gpuFrameTimeToken);
179
175
  if (time > -1) {
180
176
  this._gpuFrameTimeToken = null;
181
- this._gpuFrameTime.fetchNewFrame();
182
- this._gpuFrameTime.addCount(time, true);
177
+ gpuFrameTime.fetchNewFrame();
178
+ gpuFrameTime.addCount(time, true);
183
179
  }
184
180
  });
185
181
  }
@@ -190,7 +186,7 @@ Engine.prototype.captureGPUFrameTime = function (value) {
190
186
  this._onEndFrameObserver = null;
191
187
  }
192
188
  };
193
- Engine.prototype._getGlAlgorithmType = function (algorithmType) {
189
+ ThinEngine.prototype._getGlAlgorithmType = function (algorithmType) {
194
190
  return algorithmType === AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE ? this._gl.ANY_SAMPLES_PASSED_CONSERVATIVE : this._gl.ANY_SAMPLES_PASSED;
195
191
  };
196
192
  //# sourceMappingURL=engine.query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.query.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.query.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, int } from \"../../types\";\r\nimport { Engine } from \"../../Engines/engine\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { _TimeToken } from \"../../Instrumentation/timeToken\";\r\nimport { PerfCounter } from \"../../Misc/perfCounter\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport type { AbstractEngine } from \"../abstractEngine\";\r\nimport type { OcclusionQuery } from \"../AbstractEngine/abstractEngine.query\";\r\n\r\nimport \"../AbstractEngine/abstractEngine.query\";\r\n\r\ndeclare module \"../../Engines/engine\" {\r\n export interface Engine {\r\n /**\r\n * Starts a time query (used to measure time spent by the GPU on a specific frame)\r\n * Please note that only one query can be issued at a time\r\n * @returns a time token used to track the time span\r\n */\r\n startTimeQuery(): Nullable<_TimeToken>;\r\n\r\n /**\r\n * Ends a time query\r\n * @param token defines the token used to measure the time span\r\n * @returns the time spent (in ns)\r\n */\r\n endTimeQuery(token: _TimeToken): int;\r\n\r\n /** @internal */\r\n _currentNonTimestampToken: Nullable<_TimeToken>;\r\n /** @internal */\r\n _captureGPUFrameTime: boolean;\r\n /** @internal */\r\n _gpuFrameTimeToken: Nullable<_TimeToken>;\r\n /** @internal */\r\n _gpuFrameTime: PerfCounter;\r\n /** @internal */\r\n _onBeginFrameObserver: Nullable<Observer<AbstractEngine>>;\r\n /** @internal */\r\n _onEndFrameObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /** @internal */\r\n _createTimeQuery(): Nullable<WebGLQuery>;\r\n\r\n /** @internal */\r\n _deleteTimeQuery(query: WebGLQuery): void;\r\n\r\n /** @internal */\r\n _getGlAlgorithmType(algorithmType: number): number;\r\n\r\n /** @internal */\r\n _getTimeQueryResult(query: WebGLQuery): any;\r\n\r\n /** @internal */\r\n _getTimeQueryAvailability(query: WebGLQuery): any;\r\n }\r\n}\r\n\r\nEngine.prototype.createQuery = function (): OcclusionQuery {\r\n const query = this._gl.createQuery();\r\n if (!query) {\r\n throw new Error(\"Unable to create Occlusion Query\");\r\n }\r\n return query;\r\n};\r\n\r\nEngine.prototype.deleteQuery = function (query: OcclusionQuery): Engine {\r\n this._gl.deleteQuery(query);\r\n\r\n return this;\r\n};\r\n\r\nEngine.prototype.isQueryResultAvailable = function (query: OcclusionQuery): boolean {\r\n return this._gl.getQueryParameter(query, this._gl.QUERY_RESULT_AVAILABLE) as boolean;\r\n};\r\n\r\nEngine.prototype.getQueryResult = function (query: OcclusionQuery): number {\r\n return this._gl.getQueryParameter(query, this._gl.QUERY_RESULT) as number;\r\n};\r\n\r\nEngine.prototype.beginOcclusionQuery = function (algorithmType: number, query: OcclusionQuery): boolean {\r\n const glAlgorithm = this._getGlAlgorithmType(algorithmType);\r\n this._gl.beginQuery(glAlgorithm, query);\r\n\r\n return true;\r\n};\r\n\r\nEngine.prototype.endOcclusionQuery = function (algorithmType: number): Engine {\r\n const glAlgorithm = this._getGlAlgorithmType(algorithmType);\r\n this._gl.endQuery(glAlgorithm);\r\n\r\n return this;\r\n};\r\n\r\nEngine.prototype._createTimeQuery = function (): Nullable<WebGLQuery> {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.createQueryEXT) {\r\n return timerQuery.createQueryEXT();\r\n }\r\n\r\n return this.createQuery();\r\n};\r\n\r\nEngine.prototype._deleteTimeQuery = function (query: WebGLQuery): void {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.deleteQueryEXT) {\r\n timerQuery.deleteQueryEXT(query);\r\n return;\r\n }\r\n\r\n this.deleteQuery(query);\r\n};\r\n\r\nEngine.prototype._getTimeQueryResult = function (query: WebGLQuery): any {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.getQueryObjectEXT) {\r\n return timerQuery.getQueryObjectEXT(query, timerQuery.QUERY_RESULT_EXT);\r\n }\r\n return this.getQueryResult(query);\r\n};\r\n\r\nEngine.prototype._getTimeQueryAvailability = function (query: WebGLQuery): any {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.getQueryObjectEXT) {\r\n return timerQuery.getQueryObjectEXT(query, timerQuery.QUERY_RESULT_AVAILABLE_EXT);\r\n }\r\n return this.isQueryResultAvailable(query);\r\n};\r\n\r\nEngine.prototype.startTimeQuery = function (): Nullable<_TimeToken> {\r\n const caps = this.getCaps();\r\n const timerQuery = caps.timerQuery;\r\n if (!timerQuery) {\r\n return null;\r\n }\r\n\r\n const token = new _TimeToken();\r\n this._gl.getParameter(timerQuery.GPU_DISJOINT_EXT);\r\n if (caps.canUseTimestampForTimerQuery) {\r\n token._startTimeQuery = this._createTimeQuery();\r\n\r\n if (token._startTimeQuery) {\r\n timerQuery.queryCounterEXT(token._startTimeQuery, timerQuery.TIMESTAMP_EXT);\r\n }\r\n } else {\r\n if (this._currentNonTimestampToken) {\r\n return this._currentNonTimestampToken;\r\n }\r\n\r\n token._timeElapsedQuery = this._createTimeQuery();\r\n if (token._timeElapsedQuery) {\r\n if (timerQuery.beginQueryEXT) {\r\n timerQuery.beginQueryEXT(timerQuery.TIME_ELAPSED_EXT, token._timeElapsedQuery);\r\n } else {\r\n this._gl.beginQuery(timerQuery.TIME_ELAPSED_EXT, token._timeElapsedQuery);\r\n }\r\n }\r\n\r\n this._currentNonTimestampToken = token;\r\n }\r\n return token;\r\n};\r\n\r\nEngine.prototype.endTimeQuery = function (token: _TimeToken): int {\r\n const caps = this.getCaps();\r\n const timerQuery = caps.timerQuery;\r\n if (!timerQuery || !token) {\r\n return -1;\r\n }\r\n\r\n if (caps.canUseTimestampForTimerQuery) {\r\n if (!token._startTimeQuery) {\r\n return -1;\r\n }\r\n if (!token._endTimeQuery) {\r\n token._endTimeQuery = this._createTimeQuery();\r\n if (token._endTimeQuery) {\r\n timerQuery.queryCounterEXT(token._endTimeQuery, timerQuery.TIMESTAMP_EXT);\r\n }\r\n }\r\n } else if (!token._timeElapsedQueryEnded) {\r\n if (!token._timeElapsedQuery) {\r\n return -1;\r\n }\r\n if (timerQuery.endQueryEXT) {\r\n timerQuery.endQueryEXT(timerQuery.TIME_ELAPSED_EXT);\r\n } else {\r\n this._gl.endQuery(timerQuery.TIME_ELAPSED_EXT);\r\n this._currentNonTimestampToken = null;\r\n }\r\n token._timeElapsedQueryEnded = true;\r\n }\r\n\r\n const disjoint = this._gl.getParameter(timerQuery.GPU_DISJOINT_EXT);\r\n let available: boolean = false;\r\n if (token._endTimeQuery) {\r\n available = this._getTimeQueryAvailability(token._endTimeQuery);\r\n } else if (token._timeElapsedQuery) {\r\n available = this._getTimeQueryAvailability(token._timeElapsedQuery);\r\n }\r\n\r\n if (available && !disjoint) {\r\n let result = 0;\r\n if (caps.canUseTimestampForTimerQuery) {\r\n if (!token._startTimeQuery || !token._endTimeQuery) {\r\n return -1;\r\n }\r\n const timeStart = this._getTimeQueryResult(token._startTimeQuery);\r\n const timeEnd = this._getTimeQueryResult(token._endTimeQuery);\r\n\r\n result = timeEnd - timeStart;\r\n this._deleteTimeQuery(token._startTimeQuery);\r\n this._deleteTimeQuery(token._endTimeQuery);\r\n token._startTimeQuery = null;\r\n token._endTimeQuery = null;\r\n } else {\r\n if (!token._timeElapsedQuery) {\r\n return -1;\r\n }\r\n\r\n result = this._getTimeQueryResult(token._timeElapsedQuery);\r\n this._deleteTimeQuery(token._timeElapsedQuery);\r\n token._timeElapsedQuery = null;\r\n token._timeElapsedQueryEnded = false;\r\n }\r\n return result;\r\n }\r\n\r\n return -1;\r\n};\r\n\r\nEngine.prototype._captureGPUFrameTime = false;\r\nEngine.prototype._gpuFrameTime = new PerfCounter();\r\n\r\nEngine.prototype.getGPUFrameTimeCounter = function () {\r\n return this._gpuFrameTime;\r\n};\r\n\r\nEngine.prototype.captureGPUFrameTime = function (value: boolean) {\r\n if (value === this._captureGPUFrameTime) {\r\n return;\r\n }\r\n\r\n this._captureGPUFrameTime = value;\r\n\r\n if (value) {\r\n this._onBeginFrameObserver = this.onBeginFrameObservable.add(() => {\r\n if (!this._gpuFrameTimeToken) {\r\n this._gpuFrameTimeToken = this.startTimeQuery();\r\n }\r\n });\r\n\r\n this._onEndFrameObserver = this.onEndFrameObservable.add(() => {\r\n if (!this._gpuFrameTimeToken) {\r\n return;\r\n }\r\n const time = this.endTimeQuery(this._gpuFrameTimeToken);\r\n\r\n if (time > -1) {\r\n this._gpuFrameTimeToken = null;\r\n this._gpuFrameTime.fetchNewFrame();\r\n this._gpuFrameTime.addCount(time, true);\r\n }\r\n });\r\n } else {\r\n this.onBeginFrameObservable.remove(this._onBeginFrameObserver);\r\n this._onBeginFrameObserver = null;\r\n this.onEndFrameObservable.remove(this._onEndFrameObserver);\r\n this._onEndFrameObserver = null;\r\n }\r\n};\r\n\r\nEngine.prototype._getGlAlgorithmType = function (algorithmType: number): number {\r\n return algorithmType === AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE ? this._gl.ANY_SAMPLES_PASSED_CONSERVATIVE : this._gl.ANY_SAMPLES_PASSED;\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.query.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/Extensions/engine.query.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable, int } from \"../../types\";\r\nimport { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { _TimeToken } from \"../../Instrumentation/timeToken\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport type { AbstractEngine } from \"../abstractEngine\";\r\nimport type { OcclusionQuery } from \"../AbstractEngine/abstractEngine.query\";\r\n\r\nimport \"../AbstractEngine/abstractEngine.timeQuery\";\r\nimport \"../AbstractEngine/abstractEngine.query\";\r\n\r\ndeclare module \"../../Engines/thinEngine\" {\r\n export interface ThinEngine {\r\n /**\r\n * @internal\r\n */\r\n _captureGPUFrameTime: boolean;\r\n\r\n /**\r\n * Starts a time query (used to measure time spent by the GPU on a specific frame)\r\n * Please note that only one query can be issued at a time\r\n * @returns a time token used to track the time span\r\n */\r\n startTimeQuery(): Nullable<_TimeToken>;\r\n\r\n /**\r\n * Ends a time query\r\n * @param token defines the token used to measure the time span\r\n * @returns the time spent (in ns)\r\n */\r\n endTimeQuery(token: _TimeToken): int;\r\n\r\n /** @internal */\r\n _currentNonTimestampToken: Nullable<_TimeToken>;\r\n /** @internal */\r\n _gpuFrameTimeToken: Nullable<_TimeToken>;\r\n /** @internal */\r\n _onBeginFrameObserver: Nullable<Observer<AbstractEngine>>;\r\n /** @internal */\r\n _onEndFrameObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /** @internal */\r\n _createTimeQuery(): Nullable<WebGLQuery>;\r\n\r\n /** @internal */\r\n _deleteTimeQuery(query: WebGLQuery): void;\r\n\r\n /** @internal */\r\n _getGlAlgorithmType(algorithmType: number): number;\r\n\r\n /** @internal */\r\n _getTimeQueryResult(query: WebGLQuery): any;\r\n\r\n /** @internal */\r\n _getTimeQueryAvailability(query: WebGLQuery): any;\r\n }\r\n}\r\n\r\nThinEngine.prototype.createQuery = function (): OcclusionQuery {\r\n const query = this._gl.createQuery();\r\n if (!query) {\r\n throw new Error(\"Unable to create Occlusion Query\");\r\n }\r\n return query;\r\n};\r\n\r\nThinEngine.prototype.deleteQuery = function (query: OcclusionQuery): ThinEngine {\r\n this._gl.deleteQuery(query);\r\n\r\n return this;\r\n};\r\n\r\nThinEngine.prototype.isQueryResultAvailable = function (query: OcclusionQuery): boolean {\r\n return this._gl.getQueryParameter(query, this._gl.QUERY_RESULT_AVAILABLE) as boolean;\r\n};\r\n\r\nThinEngine.prototype.getQueryResult = function (query: OcclusionQuery): number {\r\n return this._gl.getQueryParameter(query, this._gl.QUERY_RESULT) as number;\r\n};\r\n\r\nThinEngine.prototype.beginOcclusionQuery = function (algorithmType: number, query: OcclusionQuery): boolean {\r\n const glAlgorithm = this._getGlAlgorithmType(algorithmType);\r\n this._gl.beginQuery(glAlgorithm, query);\r\n\r\n return true;\r\n};\r\n\r\nThinEngine.prototype.endOcclusionQuery = function (algorithmType: number): ThinEngine {\r\n const glAlgorithm = this._getGlAlgorithmType(algorithmType);\r\n this._gl.endQuery(glAlgorithm);\r\n\r\n return this;\r\n};\r\n\r\nThinEngine.prototype._createTimeQuery = function (): Nullable<WebGLQuery> {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.createQueryEXT) {\r\n return timerQuery.createQueryEXT();\r\n }\r\n\r\n return this.createQuery();\r\n};\r\n\r\nThinEngine.prototype._deleteTimeQuery = function (query: WebGLQuery): void {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.deleteQueryEXT) {\r\n timerQuery.deleteQueryEXT(query);\r\n return;\r\n }\r\n\r\n this.deleteQuery(query);\r\n};\r\n\r\nThinEngine.prototype._getTimeQueryResult = function (query: WebGLQuery): any {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.getQueryObjectEXT) {\r\n return timerQuery.getQueryObjectEXT(query, timerQuery.QUERY_RESULT_EXT);\r\n }\r\n return this.getQueryResult(query);\r\n};\r\n\r\nThinEngine.prototype._getTimeQueryAvailability = function (query: WebGLQuery): any {\r\n const timerQuery = <EXT_disjoint_timer_query>this.getCaps().timerQuery;\r\n\r\n if (timerQuery.getQueryObjectEXT) {\r\n return timerQuery.getQueryObjectEXT(query, timerQuery.QUERY_RESULT_AVAILABLE_EXT);\r\n }\r\n return this.isQueryResultAvailable(query);\r\n};\r\n\r\nThinEngine.prototype.startTimeQuery = function (): Nullable<_TimeToken> {\r\n const caps = this.getCaps();\r\n const timerQuery = caps.timerQuery;\r\n if (!timerQuery) {\r\n return null;\r\n }\r\n\r\n const token = new _TimeToken();\r\n this._gl.getParameter(timerQuery.GPU_DISJOINT_EXT);\r\n if (caps.canUseTimestampForTimerQuery) {\r\n token._startTimeQuery = this._createTimeQuery();\r\n\r\n if (token._startTimeQuery) {\r\n timerQuery.queryCounterEXT(token._startTimeQuery, timerQuery.TIMESTAMP_EXT);\r\n }\r\n } else {\r\n if (this._currentNonTimestampToken) {\r\n return this._currentNonTimestampToken;\r\n }\r\n\r\n token._timeElapsedQuery = this._createTimeQuery();\r\n if (token._timeElapsedQuery) {\r\n if (timerQuery.beginQueryEXT) {\r\n timerQuery.beginQueryEXT(timerQuery.TIME_ELAPSED_EXT, token._timeElapsedQuery);\r\n } else {\r\n this._gl.beginQuery(timerQuery.TIME_ELAPSED_EXT, token._timeElapsedQuery);\r\n }\r\n }\r\n\r\n this._currentNonTimestampToken = token;\r\n }\r\n return token;\r\n};\r\n\r\nThinEngine.prototype.endTimeQuery = function (token: _TimeToken): int {\r\n const caps = this.getCaps();\r\n const timerQuery = caps.timerQuery;\r\n if (!timerQuery || !token) {\r\n return -1;\r\n }\r\n\r\n if (caps.canUseTimestampForTimerQuery) {\r\n if (!token._startTimeQuery) {\r\n return -1;\r\n }\r\n if (!token._endTimeQuery) {\r\n token._endTimeQuery = this._createTimeQuery();\r\n if (token._endTimeQuery) {\r\n timerQuery.queryCounterEXT(token._endTimeQuery, timerQuery.TIMESTAMP_EXT);\r\n }\r\n }\r\n } else if (!token._timeElapsedQueryEnded) {\r\n if (!token._timeElapsedQuery) {\r\n return -1;\r\n }\r\n if (timerQuery.endQueryEXT) {\r\n timerQuery.endQueryEXT(timerQuery.TIME_ELAPSED_EXT);\r\n } else {\r\n this._gl.endQuery(timerQuery.TIME_ELAPSED_EXT);\r\n this._currentNonTimestampToken = null;\r\n }\r\n token._timeElapsedQueryEnded = true;\r\n }\r\n\r\n const disjoint = this._gl.getParameter(timerQuery.GPU_DISJOINT_EXT);\r\n let available: boolean = false;\r\n if (token._endTimeQuery) {\r\n available = this._getTimeQueryAvailability(token._endTimeQuery);\r\n } else if (token._timeElapsedQuery) {\r\n available = this._getTimeQueryAvailability(token._timeElapsedQuery);\r\n }\r\n\r\n if (available && !disjoint) {\r\n let result = 0;\r\n if (caps.canUseTimestampForTimerQuery) {\r\n if (!token._startTimeQuery || !token._endTimeQuery) {\r\n return -1;\r\n }\r\n const timeStart = this._getTimeQueryResult(token._startTimeQuery);\r\n const timeEnd = this._getTimeQueryResult(token._endTimeQuery);\r\n\r\n result = timeEnd - timeStart;\r\n this._deleteTimeQuery(token._startTimeQuery);\r\n this._deleteTimeQuery(token._endTimeQuery);\r\n token._startTimeQuery = null;\r\n token._endTimeQuery = null;\r\n } else {\r\n if (!token._timeElapsedQuery) {\r\n return -1;\r\n }\r\n\r\n result = this._getTimeQueryResult(token._timeElapsedQuery);\r\n this._deleteTimeQuery(token._timeElapsedQuery);\r\n token._timeElapsedQuery = null;\r\n token._timeElapsedQueryEnded = false;\r\n }\r\n return result;\r\n }\r\n\r\n return -1;\r\n};\r\n\r\nThinEngine.prototype.captureGPUFrameTime = function (value: boolean) {\r\n if (value === this._captureGPUFrameTime) {\r\n return;\r\n }\r\n\r\n this._captureGPUFrameTime = value;\r\n\r\n if (value) {\r\n const gpuFrameTime = this.getGPUFrameTimeCounter();\r\n\r\n this._onBeginFrameObserver = this.onBeginFrameObservable.add(() => {\r\n if (!this._gpuFrameTimeToken) {\r\n this._gpuFrameTimeToken = this.startTimeQuery();\r\n }\r\n });\r\n\r\n this._onEndFrameObserver = this.onEndFrameObservable.add(() => {\r\n if (!this._gpuFrameTimeToken) {\r\n return;\r\n }\r\n const time = this.endTimeQuery(this._gpuFrameTimeToken);\r\n\r\n if (time > -1) {\r\n this._gpuFrameTimeToken = null;\r\n gpuFrameTime.fetchNewFrame();\r\n gpuFrameTime.addCount(time, true);\r\n }\r\n });\r\n } else {\r\n this.onBeginFrameObservable.remove(this._onBeginFrameObserver);\r\n this._onBeginFrameObserver = null;\r\n this.onEndFrameObservable.remove(this._onEndFrameObserver);\r\n this._onEndFrameObserver = null;\r\n }\r\n};\r\n\r\nThinEngine.prototype._getGlAlgorithmType = function (algorithmType: number): number {\r\n return algorithmType === AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE ? this._gl.ANY_SAMPLES_PASSED_CONSERVATIVE : this._gl.ANY_SAMPLES_PASSED;\r\n};\r\n"]}
@@ -769,13 +769,13 @@ export class AbstractEngine {
769
769
  */
770
770
  // Not mixed with Version for tooling purpose.
771
771
  static get NpmPackage() {
772
- return "babylonjs@7.47.1";
772
+ return "babylonjs@7.47.2";
773
773
  }
774
774
  /**
775
775
  * Returns the current version of the framework
776
776
  */
777
777
  static get Version() {
778
- return "7.47.1";
778
+ return "7.47.2";
779
779
  }
780
780
  /**
781
781
  * Gets the HTML canvas attached with the current webGL context