Skip to content

Commit

Permalink
Renderer: Document more modules (#30213)
Browse files Browse the repository at this point in the history
* Renderer: Document more modules

* Renderer: Fix reference.

* RenderObject: Clean up.
  • Loading branch information
Mugen87 authored Dec 26, 2024
1 parent eb8c334 commit 34c428c
Show file tree
Hide file tree
Showing 9 changed files with 866 additions and 25 deletions.
4 changes: 2 additions & 2 deletions src/renderers/common/Animation.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ class Animation {
/**
* Constructs a new animation loop management component.
*
* @param {Nodes} nodes - Renderer component for managing nodes relatd logic.
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
* @param {Info} info - Renderer component for managing metrics and monitoring data.
*/
constructor( nodes, info ) {

/**
* Renderer component for managing nodes relatd logic.
* Renderer component for managing nodes related logic.
*
* @type {Nodes}
*/
Expand Down
4 changes: 2 additions & 2 deletions src/renderers/common/Background.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class Background extends DataMap {
* Constructs a new background management component.
*
* @param {Renderer} renderer - The renderer.
* @param {Nodes} nodes - Renderer component for managing nodes relatd logic.
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
*/
constructor( renderer, nodes ) {

Expand All @@ -35,7 +35,7 @@ class Background extends DataMap {
this.renderer = renderer;

/**
* Renderer component for managing nodes relatd logic.
* Renderer component for managing nodes related logic.
*
* @type {Nodes}
*/
Expand Down
87 changes: 87 additions & 0 deletions src/renderers/common/Info.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,61 @@
/**
* This renderer module provides a series of statistical information
* about the GPU memory and the rendering process. Useful for debugging
* and monitoring.
*/
class Info {

/**
* Constructs a new info component.
*/
constructor() {

/**
* Whether frame related metrics should automatically
* be resetted or not. This property should be set to `false`
* by apps which manage their own animation loop. They must
* then call `renderer.info.reset()` once per frame manually.
*
* @type {Boolean}
* @default true
*/
this.autoReset = true;

/**
* The current frame ID. This ID is managed
* by `NodeFrame`.
*
* @type {Number}
* @readonly
* @default 0
*/
this.frame = 0;

/**
* The number of render calls since the
* app has been started.
*
* @type {Number}
* @readonly
* @default 0
*/
this.calls = 0;

/**
* Render related metrics.
*
* @type {Object}
* @readonly
* @property {Number} calls - The number of render calls since the app has been started.
* @property {Number} frameCalls - The number of render calls of the current frame.
* @property {Number} drawCalls - The number of draw calls of the current frame.
* @property {Number} triangles - The number of rendered triangle primitives of the current frame.
* @property {Number} points - The number of rendered point primitives of the current frame.
* @property {Number} lines - The number of rendered line primitives of the current frame.
* @property {Number} previousFrameCalls - The number of render calls of the previous frame.
* @property {Number} timestamp - The timestamp of the frame when using `renderer.renderAsync()`.
* @property {Number} timestampCalls - The number of render calls using `renderer.renderAsync()`.
*/
this.render = {
calls: 0,
frameCalls: 0,
Expand All @@ -19,6 +68,17 @@ class Info {
timestampCalls: 0
};

/**
* Compute related metrics.
*
* @type {Object}
* @readonly
* @property {Number} calls - The number of compute calls since the app has been started.
* @property {Number} frameCalls - The number of compute calls of the current frame.
* @property {Number} previousFrameCalls - The number of compute calls of the previous frame.
* @property {Number} timestamp - The timestamp of the frame when using `renderer.computeAsync()`.
* @property {Number} timestampCalls - The number of render calls using `renderer.computeAsync()`.
*/
this.compute = {
calls: 0,
frameCalls: 0,
Expand All @@ -27,13 +87,28 @@ class Info {
timestampCalls: 0
};

/**
* Memory related metrics.
*
* @type {Object}
* @readonly
* @property {Number} geometries - The number of active geometries.
* @property {Number} frameCalls - The number of active textures.
*/
this.memory = {
geometries: 0,
textures: 0
};

}

/**
* This method should be executed per draw call and updates the corresponding metrics.
*
* @param {Object3D} object - The 3D object that is going to be rendered.
* @param {Number} count - The vertex or index count.
* @param {Number} instanceCount - The instance count.
*/
update( object, count, instanceCount ) {

this.render.drawCalls ++;
Expand Down Expand Up @@ -62,6 +137,12 @@ class Info {

}

/**
* Used by async render methods to updated timestamp metrics.
*
* @param {('render'|'compute')} type - The type of render call.
* @param {Number} time - The duration of the compute/render call in milliseconds.
*/
updateTimestamp( type, time ) {

if ( this[ type ].timestampCalls === 0 ) {
Expand All @@ -85,6 +166,9 @@ class Info {

}

/**
* Resets frame related metrics.
*/
reset() {

const previousRenderFrameCalls = this.render.frameCalls;
Expand All @@ -105,6 +189,9 @@ class Info {

}

/**
* Performs a complete reset of the object.
*/
dispose() {

this.reset();
Expand Down
Loading

0 comments on commit 34c428c

Please sign in to comment.