@gnsx/three 0.184.12 → 0.184.13
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.
- package/build/three.cjs +2008 -1932
- package/build/three.core.js +507 -1
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +2 -432
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +104 -3
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +104 -3
- package/build/three.webgpu.nodes.min.js +1 -1
- package/package.json +1 -1
- package/src/Three.Core.js +5 -0
- package/src/Three.js +0 -3
- package/src/nodes/core/NodeFrame.js +22 -0
- package/src/nodes/lighting/ShadowNode.js +20 -0
- package/src/profiler/ProfilerService.js +95 -22
- package/src/renderers/common/Renderer.js +64 -0
package/build/three.core.js
CHANGED
|
@@ -59707,6 +59707,512 @@ class TextureUtils {
|
|
|
59707
59707
|
|
|
59708
59708
|
}
|
|
59709
59709
|
|
|
59710
|
+
// WITH_GENESYS
|
|
59711
|
+
/**
|
|
59712
|
+
* ProfilerService — per-label CPU timing with ring-buffer aggregation and DevTools integration.
|
|
59713
|
+
*
|
|
59714
|
+
* Activate via environment variable:
|
|
59715
|
+
* PROFILING=1 stats + trace (full profile)
|
|
59716
|
+
* PROFILING=stats stats only, no trace accumulation (lower overhead)
|
|
59717
|
+
*
|
|
59718
|
+
* Quick start (browser console):
|
|
59719
|
+
* __gnsx_profiler.enable()
|
|
59720
|
+
* // play for a few seconds
|
|
59721
|
+
* __gnsx_profiler.report() // sorted console.table (aggregated stats)
|
|
59722
|
+
* __gnsx_profiler.downloadTrace() // download gnsx-trace.json for Speedscope / Perfetto
|
|
59723
|
+
* __gnsx_profiler.reset() // clear samples and trace
|
|
59724
|
+
* __gnsx_profiler.disable()
|
|
59725
|
+
*/
|
|
59726
|
+
|
|
59727
|
+
const RING_SIZE = 120;
|
|
59728
|
+
const FRAME_BUDGET_MS = 1000 / 60;
|
|
59729
|
+
/** Max events in the trace log (~50s at 60fps with 8 labels). */
|
|
59730
|
+
const MAX_TRACE_EVENTS = 50_000;
|
|
59731
|
+
const NOOP = () => {};
|
|
59732
|
+
|
|
59733
|
+
function _readProfilingEnv() {
|
|
59734
|
+
|
|
59735
|
+
const raw =
|
|
59736
|
+
( typeof process !== 'undefined' ? process.env?.[ 'PROFILING' ] : undefined ) ??
|
|
59737
|
+
( typeof globalThis !== 'undefined' ? globalThis[ '__gnsx_env__' ]?.[ 'PROFILING' ] : undefined ) ??
|
|
59738
|
+
( typeof globalThis !== 'undefined' ? globalThis[ '__GNSX_PROFILING__' ] : undefined );
|
|
59739
|
+
|
|
59740
|
+
if ( ! raw || raw === '0' || raw === 'false' ) return false;
|
|
59741
|
+
if ( raw === 'stats' ) return 'stats';
|
|
59742
|
+
return 'full';
|
|
59743
|
+
|
|
59744
|
+
}
|
|
59745
|
+
|
|
59746
|
+
class ProfilerServiceClass {
|
|
59747
|
+
|
|
59748
|
+
constructor() {
|
|
59749
|
+
|
|
59750
|
+
const envProfile = _readProfilingEnv();
|
|
59751
|
+
this._profile = envProfile !== false ? envProfile : 'full';
|
|
59752
|
+
this._enabled = envProfile !== false;
|
|
59753
|
+
|
|
59754
|
+
/** @type {Map<string, Float64Array>} */
|
|
59755
|
+
this.buffers = new Map();
|
|
59756
|
+
/** @type {Map<string, number>} */
|
|
59757
|
+
this.cursors = new Map();
|
|
59758
|
+
/** @type {Map<string, number>} */
|
|
59759
|
+
this.counts = new Map();
|
|
59760
|
+
/** @type {Map<string, Array<{ startTime: number, startMark: string, traced: boolean }>>} */
|
|
59761
|
+
this.marks = new Map();
|
|
59762
|
+
/** @type {ChromeTraceEvent[]} */
|
|
59763
|
+
this.traceEvents = [];
|
|
59764
|
+
this.traceStartTime = 0;
|
|
59765
|
+
this._markId = 0;
|
|
59766
|
+
|
|
59767
|
+
if ( this._enabled ) {
|
|
59768
|
+
|
|
59769
|
+
this.traceStartTime = performance.now();
|
|
59770
|
+
this.begin = this._beginImpl.bind( this );
|
|
59771
|
+
this.end = this._endImpl.bind( this );
|
|
59772
|
+
this._exposeGlobal();
|
|
59773
|
+
console.log( `[ProfilerService] auto-started from env (profile: ${this._profile})` );
|
|
59774
|
+
|
|
59775
|
+
} else {
|
|
59776
|
+
|
|
59777
|
+
this.begin = NOOP;
|
|
59778
|
+
this.end = NOOP;
|
|
59779
|
+
|
|
59780
|
+
}
|
|
59781
|
+
|
|
59782
|
+
}
|
|
59783
|
+
|
|
59784
|
+
/**
|
|
59785
|
+
* Set the active profile. Must be called before enable() to take effect on the current session.
|
|
59786
|
+
*
|
|
59787
|
+
* @param {'full'|'stats'} profile
|
|
59788
|
+
*/
|
|
59789
|
+
setProfile( profile ) {
|
|
59790
|
+
|
|
59791
|
+
this._profile = profile;
|
|
59792
|
+
|
|
59793
|
+
}
|
|
59794
|
+
|
|
59795
|
+
/**
|
|
59796
|
+
* @return {'full'|'stats'}
|
|
59797
|
+
*/
|
|
59798
|
+
getProfile() {
|
|
59799
|
+
|
|
59800
|
+
return this._profile;
|
|
59801
|
+
|
|
59802
|
+
}
|
|
59803
|
+
|
|
59804
|
+
enable() {
|
|
59805
|
+
|
|
59806
|
+
this._clearState();
|
|
59807
|
+
this._enabled = true;
|
|
59808
|
+
this.begin = this._beginImpl.bind( this );
|
|
59809
|
+
this.end = this._endImpl.bind( this );
|
|
59810
|
+
this._exposeGlobal();
|
|
59811
|
+
console.log( `[ProfilerService] enabled (profile: ${this._profile}) — call __gnsx_profiler.report() or downloadTrace() from the console` );
|
|
59812
|
+
|
|
59813
|
+
}
|
|
59814
|
+
|
|
59815
|
+
disable() {
|
|
59816
|
+
|
|
59817
|
+
this._clearState();
|
|
59818
|
+
this._enabled = false;
|
|
59819
|
+
this.begin = NOOP;
|
|
59820
|
+
this.end = NOOP;
|
|
59821
|
+
console.log( '[ProfilerService] disabled' );
|
|
59822
|
+
|
|
59823
|
+
}
|
|
59824
|
+
|
|
59825
|
+
isEnabled() {
|
|
59826
|
+
|
|
59827
|
+
return this._enabled;
|
|
59828
|
+
|
|
59829
|
+
}
|
|
59830
|
+
|
|
59831
|
+
_exposeGlobal() {
|
|
59832
|
+
|
|
59833
|
+
if ( typeof window !== 'undefined' ) {
|
|
59834
|
+
|
|
59835
|
+
window.__gnsx_profiler = this;
|
|
59836
|
+
|
|
59837
|
+
}
|
|
59838
|
+
|
|
59839
|
+
}
|
|
59840
|
+
|
|
59841
|
+
/**
|
|
59842
|
+
* @param {string} label
|
|
59843
|
+
*/
|
|
59844
|
+
_beginImpl( label ) {
|
|
59845
|
+
|
|
59846
|
+
const startTime = performance.now();
|
|
59847
|
+
const startMark = `gnsx:${label}:start:${++ this._markId}`;
|
|
59848
|
+
let stack = this.marks.get( label );
|
|
59849
|
+
if ( stack === undefined ) {
|
|
59850
|
+
|
|
59851
|
+
stack = [];
|
|
59852
|
+
this.marks.set( label, stack );
|
|
59853
|
+
|
|
59854
|
+
}
|
|
59855
|
+
|
|
59856
|
+
const traced = this._profile === 'full' && this.traceEvents.length < MAX_TRACE_EVENTS;
|
|
59857
|
+
if ( traced ) {
|
|
59858
|
+
|
|
59859
|
+
this.traceEvents.push( {
|
|
59860
|
+
name: label,
|
|
59861
|
+
ph: 'B',
|
|
59862
|
+
ts: this._getTraceTimestamp( startTime ),
|
|
59863
|
+
pid: 1,
|
|
59864
|
+
tid: 1,
|
|
59865
|
+
cat: 'gnsx',
|
|
59866
|
+
} );
|
|
59867
|
+
|
|
59868
|
+
}
|
|
59869
|
+
|
|
59870
|
+
performance.mark( startMark );
|
|
59871
|
+
stack.push( { startTime, startMark, traced } );
|
|
59872
|
+
|
|
59873
|
+
}
|
|
59874
|
+
|
|
59875
|
+
/**
|
|
59876
|
+
* @param {string} label
|
|
59877
|
+
*/
|
|
59878
|
+
_endImpl( label ) {
|
|
59879
|
+
|
|
59880
|
+
const stack = this.marks.get( label );
|
|
59881
|
+
const mark = stack?.pop();
|
|
59882
|
+
if ( mark === undefined ) return;
|
|
59883
|
+
if ( stack.length === 0 ) this.marks.delete( label );
|
|
59884
|
+
|
|
59885
|
+
const now = performance.now();
|
|
59886
|
+
const { startTime, startMark, traced } = mark;
|
|
59887
|
+
const duration = now - startTime;
|
|
59888
|
+
const endMark = `gnsx:${label}:end:${++ this._markId}`;
|
|
59889
|
+
|
|
59890
|
+
performance.mark( endMark );
|
|
59891
|
+
performance.measure( `gnsx:${label}`, startMark, endMark );
|
|
59892
|
+
|
|
59893
|
+
let buffer = this.buffers.get( label );
|
|
59894
|
+
if ( ! buffer ) {
|
|
59895
|
+
|
|
59896
|
+
buffer = new Float64Array( RING_SIZE );
|
|
59897
|
+
this.buffers.set( label, buffer );
|
|
59898
|
+
this.cursors.set( label, 0 );
|
|
59899
|
+
this.counts.set( label, 0 );
|
|
59900
|
+
|
|
59901
|
+
}
|
|
59902
|
+
|
|
59903
|
+
const cursor = this.cursors.get( label );
|
|
59904
|
+
buffer[ cursor ] = duration;
|
|
59905
|
+
this.cursors.set( label, ( cursor + 1 ) % RING_SIZE );
|
|
59906
|
+
this.counts.set( label, Math.min( ( this.counts.get( label ) + 1 ), RING_SIZE ) );
|
|
59907
|
+
|
|
59908
|
+
if ( traced ) {
|
|
59909
|
+
|
|
59910
|
+
this.traceEvents.push( {
|
|
59911
|
+
name: label,
|
|
59912
|
+
ph: 'E',
|
|
59913
|
+
ts: this._getTraceTimestamp( now ),
|
|
59914
|
+
pid: 1,
|
|
59915
|
+
tid: 1,
|
|
59916
|
+
cat: 'gnsx',
|
|
59917
|
+
} );
|
|
59918
|
+
|
|
59919
|
+
}
|
|
59920
|
+
|
|
59921
|
+
}
|
|
59922
|
+
|
|
59923
|
+
/**
|
|
59924
|
+
* @param {string} label
|
|
59925
|
+
* @return {number[]}
|
|
59926
|
+
*/
|
|
59927
|
+
getValidSamples( label ) {
|
|
59928
|
+
|
|
59929
|
+
const buffer = this.buffers.get( label );
|
|
59930
|
+
const count = this.counts.get( label ) ?? 0;
|
|
59931
|
+
if ( ! buffer || count === 0 ) return [];
|
|
59932
|
+
return count < RING_SIZE
|
|
59933
|
+
? Array.from( buffer.subarray( 0, count ) )
|
|
59934
|
+
: Array.from( buffer );
|
|
59935
|
+
|
|
59936
|
+
}
|
|
59937
|
+
|
|
59938
|
+
/**
|
|
59939
|
+
* @param {string} label
|
|
59940
|
+
* @return {import('./ProfilerService.js').ProfilerStats|null}
|
|
59941
|
+
*/
|
|
59942
|
+
getStats( label ) {
|
|
59943
|
+
|
|
59944
|
+
const samples = this.getValidSamples( label );
|
|
59945
|
+
if ( samples.length === 0 ) return null;
|
|
59946
|
+
|
|
59947
|
+
const sorted = [ ...samples ].sort( ( a, b ) => a - b );
|
|
59948
|
+
const avg = sorted.reduce( ( a, b ) => a + b, 0 ) / sorted.length;
|
|
59949
|
+
|
|
59950
|
+
return {
|
|
59951
|
+
label,
|
|
59952
|
+
samples: samples.length,
|
|
59953
|
+
avg,
|
|
59954
|
+
min: sorted[ 0 ],
|
|
59955
|
+
max: sorted[ sorted.length - 1 ],
|
|
59956
|
+
p95: sorted[ Math.floor( sorted.length * 0.95 ) ],
|
|
59957
|
+
frameBudget: ( avg / FRAME_BUDGET_MS ) * 100,
|
|
59958
|
+
};
|
|
59959
|
+
|
|
59960
|
+
}
|
|
59961
|
+
|
|
59962
|
+
/**
|
|
59963
|
+
* @return {import('./ProfilerService.js').ProfilerStats[]}
|
|
59964
|
+
*/
|
|
59965
|
+
getAllStats() {
|
|
59966
|
+
|
|
59967
|
+
return [ ...this.buffers.keys() ]
|
|
59968
|
+
.map( label => this.getStats( label ) )
|
|
59969
|
+
.filter( s => s !== null );
|
|
59970
|
+
|
|
59971
|
+
}
|
|
59972
|
+
|
|
59973
|
+
report() {
|
|
59974
|
+
|
|
59975
|
+
const stats = this.getAllStats();
|
|
59976
|
+
if ( stats.length === 0 ) {
|
|
59977
|
+
|
|
59978
|
+
console.log( '[ProfilerService] No data. Enable profiling first and wait a few frames.' );
|
|
59979
|
+
return;
|
|
59980
|
+
|
|
59981
|
+
}
|
|
59982
|
+
|
|
59983
|
+
stats.sort( ( a, b ) => b.avg - a.avg );
|
|
59984
|
+
console.table(
|
|
59985
|
+
stats.map( s => ( {
|
|
59986
|
+
label: s.label,
|
|
59987
|
+
'avg ms': s.avg.toFixed( 3 ),
|
|
59988
|
+
'min ms': s.min.toFixed( 3 ),
|
|
59989
|
+
'max ms': s.max.toFixed( 3 ),
|
|
59990
|
+
'p95 ms': s.p95.toFixed( 3 ),
|
|
59991
|
+
'budget %': s.frameBudget.toFixed( 1 ) + '%',
|
|
59992
|
+
samples: s.samples,
|
|
59993
|
+
} ) )
|
|
59994
|
+
);
|
|
59995
|
+
|
|
59996
|
+
}
|
|
59997
|
+
|
|
59998
|
+
/**
|
|
59999
|
+
* @return {import('./ProfilerService.js').ChromeTrace}
|
|
60000
|
+
*/
|
|
60001
|
+
exportChromeTrace() {
|
|
60002
|
+
|
|
60003
|
+
return {
|
|
60004
|
+
displayTimeUnit: 'ms',
|
|
60005
|
+
traceEvents: [
|
|
60006
|
+
{ name: 'process_name', ph: 'M', pid: 1, args: { name: 'Genesys Profiler' } },
|
|
60007
|
+
{ name: 'thread_name', ph: 'M', pid: 1, tid: 1, args: { name: 'Main Thread' } },
|
|
60008
|
+
...this.traceEvents,
|
|
60009
|
+
],
|
|
60010
|
+
};
|
|
60011
|
+
|
|
60012
|
+
}
|
|
60013
|
+
|
|
60014
|
+
/**
|
|
60015
|
+
* @param {number} time
|
|
60016
|
+
* @return {number}
|
|
60017
|
+
*/
|
|
60018
|
+
_getTraceTimestamp( time ) {
|
|
60019
|
+
|
|
60020
|
+
return ( time - this.traceStartTime ) * 1000;
|
|
60021
|
+
|
|
60022
|
+
}
|
|
60023
|
+
|
|
60024
|
+
/**
|
|
60025
|
+
* @param {string} [filename='gnsx-trace.json']
|
|
60026
|
+
*/
|
|
60027
|
+
downloadTrace( filename = 'gnsx-trace.json' ) {
|
|
60028
|
+
|
|
60029
|
+
if ( typeof document === 'undefined' ) {
|
|
60030
|
+
|
|
60031
|
+
console.log( '[ProfilerService] downloadTrace() only works in the browser. Use exportChromeTrace() in Node.js.' );
|
|
60032
|
+
return;
|
|
60033
|
+
|
|
60034
|
+
}
|
|
60035
|
+
|
|
60036
|
+
if ( this._profile !== 'full' ) {
|
|
60037
|
+
|
|
60038
|
+
console.log( `[ProfilerService] No trace — current profile is '${this._profile}'. Use setProfile('full') before enabling.` );
|
|
60039
|
+
return;
|
|
60040
|
+
|
|
60041
|
+
}
|
|
60042
|
+
|
|
60043
|
+
if ( this.traceEvents.length === 0 ) {
|
|
60044
|
+
|
|
60045
|
+
console.log( '[ProfilerService] No trace events. Enable the profiler and play for a few seconds first.' );
|
|
60046
|
+
return;
|
|
60047
|
+
|
|
60048
|
+
}
|
|
60049
|
+
|
|
60050
|
+
const json = JSON.stringify( this.exportChromeTrace() );
|
|
60051
|
+
const blob = new Blob( [ json ], { type: 'application/json' } );
|
|
60052
|
+
const url = URL.createObjectURL( blob );
|
|
60053
|
+
const a = document.createElement( 'a' );
|
|
60054
|
+
a.href = url;
|
|
60055
|
+
a.download = filename;
|
|
60056
|
+
a.click();
|
|
60057
|
+
URL.revokeObjectURL( url );
|
|
60058
|
+
console.log( `[ProfilerService] Trace downloaded: ${filename} (${this.traceEvents.length} events)` );
|
|
60059
|
+
|
|
60060
|
+
}
|
|
60061
|
+
|
|
60062
|
+
/**
|
|
60063
|
+
* @return {import('./ProfilerService.js').ProfilerStats[]}
|
|
60064
|
+
*/
|
|
60065
|
+
exportJSON() {
|
|
60066
|
+
|
|
60067
|
+
return this.getAllStats();
|
|
60068
|
+
|
|
60069
|
+
}
|
|
60070
|
+
|
|
60071
|
+
_clearState() {
|
|
60072
|
+
|
|
60073
|
+
this.buffers.clear();
|
|
60074
|
+
this.cursors.clear();
|
|
60075
|
+
this.counts.clear();
|
|
60076
|
+
this.marks.clear();
|
|
60077
|
+
this.traceEvents = [];
|
|
60078
|
+
this.traceStartTime = performance.now();
|
|
60079
|
+
this._markId = 0;
|
|
60080
|
+
|
|
60081
|
+
}
|
|
60082
|
+
|
|
60083
|
+
reset() {
|
|
60084
|
+
|
|
60085
|
+
this._clearState();
|
|
60086
|
+
console.log( '[ProfilerService] data reset' );
|
|
60087
|
+
|
|
60088
|
+
}
|
|
60089
|
+
|
|
60090
|
+
}
|
|
60091
|
+
|
|
60092
|
+
/**
|
|
60093
|
+
* @typedef {Object} ProfilerStats
|
|
60094
|
+
* @property {string} label
|
|
60095
|
+
* @property {number} samples
|
|
60096
|
+
* @property {number} avg
|
|
60097
|
+
* @property {number} min
|
|
60098
|
+
* @property {number} max
|
|
60099
|
+
* @property {number} p95
|
|
60100
|
+
* @property {number} frameBudget Percentage of a 60 fps frame budget (16.67 ms)
|
|
60101
|
+
*/
|
|
60102
|
+
|
|
60103
|
+
/**
|
|
60104
|
+
* @typedef {Object} ChromeTraceEvent
|
|
60105
|
+
* @property {string} name
|
|
60106
|
+
* @property {'B'|'E'} ph
|
|
60107
|
+
* @property {number} ts
|
|
60108
|
+
* @property {1} pid
|
|
60109
|
+
* @property {1} tid
|
|
60110
|
+
* @property {'gnsx'} cat
|
|
60111
|
+
*/
|
|
60112
|
+
|
|
60113
|
+
/**
|
|
60114
|
+
* @typedef {Object} ChromeTraceMetadataEvent
|
|
60115
|
+
* @property {'process_name'|'thread_name'} name
|
|
60116
|
+
* @property {'M'} ph
|
|
60117
|
+
* @property {1} pid
|
|
60118
|
+
* @property {1} [tid]
|
|
60119
|
+
* @property {{ name: string }} args
|
|
60120
|
+
*/
|
|
60121
|
+
|
|
60122
|
+
/**
|
|
60123
|
+
* @typedef {Object} ChromeTrace
|
|
60124
|
+
* @property {'ms'} displayTimeUnit
|
|
60125
|
+
* @property {Array<ChromeTraceEvent|ChromeTraceMetadataEvent>} traceEvents
|
|
60126
|
+
*/
|
|
60127
|
+
|
|
60128
|
+
/**
|
|
60129
|
+
* @typedef {'full'|'stats'} ProfilingProfile
|
|
60130
|
+
*/
|
|
60131
|
+
|
|
60132
|
+
const ProfilerService = new ProfilerServiceClass();
|
|
60133
|
+
|
|
60134
|
+
function applyProfileToMethod( label, descriptor ) {
|
|
60135
|
+
|
|
60136
|
+
if ( _readProfilingEnv() === false ) return descriptor;
|
|
60137
|
+
|
|
60138
|
+
const original = descriptor.value;
|
|
60139
|
+
|
|
60140
|
+
function profiled( ...args ) {
|
|
60141
|
+
|
|
60142
|
+
ProfilerService.begin( label );
|
|
60143
|
+
try {
|
|
60144
|
+
|
|
60145
|
+
const result = original.apply( this, args );
|
|
60146
|
+
if ( result instanceof Promise ) {
|
|
60147
|
+
|
|
60148
|
+
return result.finally( () => ProfilerService.end( label ) );
|
|
60149
|
+
|
|
60150
|
+
}
|
|
60151
|
+
|
|
60152
|
+
ProfilerService.end( label );
|
|
60153
|
+
return result;
|
|
60154
|
+
|
|
60155
|
+
} catch ( error ) {
|
|
60156
|
+
|
|
60157
|
+
ProfilerService.end( label );
|
|
60158
|
+
throw error;
|
|
60159
|
+
|
|
60160
|
+
}
|
|
60161
|
+
|
|
60162
|
+
}
|
|
60163
|
+
|
|
60164
|
+
descriptor.value = profiled;
|
|
60165
|
+
return descriptor;
|
|
60166
|
+
|
|
60167
|
+
}
|
|
60168
|
+
|
|
60169
|
+
/**
|
|
60170
|
+
* Method decorator that profiles the decorated method.
|
|
60171
|
+
* The label is automatically set to `ClassName.methodName`.
|
|
60172
|
+
*
|
|
60173
|
+
* @param {Object} target
|
|
60174
|
+
* @param {string|symbol} propertyKey
|
|
60175
|
+
* @param {PropertyDescriptor} descriptor
|
|
60176
|
+
* @return {PropertyDescriptor}
|
|
60177
|
+
*/
|
|
60178
|
+
function profile( target, propertyKey, descriptor ) {
|
|
60179
|
+
|
|
60180
|
+
const className = target.constructor?.name ?? 'Unknown';
|
|
60181
|
+
return applyProfileToMethod( `${className}.${String( propertyKey )}`, descriptor );
|
|
60182
|
+
|
|
60183
|
+
}
|
|
60184
|
+
|
|
60185
|
+
/**
|
|
60186
|
+
* Class decorator that profiles every method of the decorated class.
|
|
60187
|
+
*
|
|
60188
|
+
* @template T
|
|
60189
|
+
* @param {T} constructor
|
|
60190
|
+
* @return {T}
|
|
60191
|
+
*/
|
|
60192
|
+
function profileClass( constructor ) {
|
|
60193
|
+
|
|
60194
|
+
const proto = constructor.prototype;
|
|
60195
|
+
for ( const key of Object.getOwnPropertyNames( proto ) ) {
|
|
60196
|
+
|
|
60197
|
+
if ( key === 'constructor' ) continue;
|
|
60198
|
+
const descriptor = Object.getOwnPropertyDescriptor( proto, key );
|
|
60199
|
+
if ( ! descriptor || typeof descriptor.value !== 'function' ) continue;
|
|
60200
|
+
Object.defineProperty(
|
|
60201
|
+
proto,
|
|
60202
|
+
key,
|
|
60203
|
+
applyProfileToMethod( `${constructor.name}.${key}`, { ...descriptor } )
|
|
60204
|
+
);
|
|
60205
|
+
|
|
60206
|
+
}
|
|
60207
|
+
|
|
60208
|
+
return constructor;
|
|
60209
|
+
|
|
60210
|
+
}
|
|
60211
|
+
// !WITH_GENESYS
|
|
60212
|
+
|
|
60213
|
+
// !WITH_GENESYS
|
|
60214
|
+
|
|
60215
|
+
|
|
59710
60216
|
if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
|
|
59711
60217
|
|
|
59712
60218
|
__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {
|
|
@@ -59729,4 +60235,4 @@ if ( typeof window !== 'undefined' ) {
|
|
|
59729
60235
|
|
|
59730
60236
|
}
|
|
59731
60237
|
|
|
59732
|
-
export { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, Controls, CubeCamera, CubeDepthTexture, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExternalTexture, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, FrustumArray, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NormalGAPacking, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, R11_EAC_Format, RAD2DEG, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RenderTarget3D, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, ReversedDepthFuncs, RingGeometry, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsUtils, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLRenderTarget, WebGPUCoordinateSystem, WebXRController, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, cloneUniforms, createCanvasElement, createElementNS, error, getByteLength, getConsoleFunction, getUnlitUniformColorSpace, isTypedArray, log, mergeUniforms, probeAsync, setConsoleFunction, warn, warnOnce, yieldToMain };
|
|
60238
|
+
export { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, BezierInterpolant, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, Compatibility, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, Controls, CubeCamera, CubeDepthTexture, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExternalTexture, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, FrustumArray, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HTMLTexture, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateBezier, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InterpolationSamplingMode, InterpolationSamplingType, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, MOUSE, Material, MaterialBlending, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoNormalPacking, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NormalGAPacking, NormalRGPacking, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, ProfilerService, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, R11_EAC_Format, RAD2DEG, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RG11_EAC_Format, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RenderTarget3D, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, ReversedDepthFuncs, RingGeometry, SIGNED_R11_EAC_Format, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SIGNED_RG11_EAC_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, Timer, TimestampQuery, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsUtils, UnsignedByteType, UnsignedInt101111Type, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoFrameTexture, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLRenderTarget, WebGPUCoordinateSystem, WebXRController, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, cloneUniforms, createCanvasElement, createElementNS, error, getByteLength, getConsoleFunction, getUnlitUniformColorSpace, isTypedArray, log, mergeUniforms, probeAsync, profile, profileClass, setConsoleFunction, warn, warnOnce, yieldToMain };
|