Info.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. class Info {
  2. constructor() {
  3. this.autoReset = true;
  4. this.frame = 0;
  5. this.calls = 0;
  6. this.render = {
  7. calls: 0,
  8. frameCalls: 0,
  9. drawCalls: 0,
  10. triangles: 0,
  11. points: 0,
  12. lines: 0,
  13. timestamp: 0,
  14. previousFrameCalls: 0,
  15. timestampCalls: 0
  16. };
  17. this.compute = {
  18. calls: 0,
  19. frameCalls: 0,
  20. timestamp: 0,
  21. previousFrameCalls: 0,
  22. timestampCalls: 0
  23. };
  24. this.memory = {
  25. geometries: 0,
  26. textures: 0
  27. };
  28. }
  29. update( object, count, instanceCount ) {
  30. this.render.drawCalls ++;
  31. if ( object.isMesh || object.isSprite ) {
  32. this.render.triangles += instanceCount * ( count / 3 );
  33. } else if ( object.isPoints ) {
  34. this.render.points += instanceCount * count;
  35. } else if ( object.isLineSegments ) {
  36. this.render.lines += instanceCount * ( count / 2 );
  37. } else if ( object.isLine ) {
  38. this.render.lines += instanceCount * ( count - 1 );
  39. } else {
  40. console.error( 'THREE.WebGPUInfo: Unknown object type.' );
  41. }
  42. }
  43. updateTimestamp( type, time ) {
  44. if ( this[ type ].timestampCalls === 0 ) {
  45. this[ type ].timestamp = 0;
  46. }
  47. this[ type ].timestamp += time;
  48. this[ type ].timestampCalls ++;
  49. if ( this[ type ].timestampCalls >= this[ type ].previousFrameCalls ) {
  50. this[ type ].timestampCalls = 0;
  51. }
  52. }
  53. reset() {
  54. const previousRenderFrameCalls = this.render.frameCalls;
  55. this.render.previousFrameCalls = previousRenderFrameCalls;
  56. const previousComputeFrameCalls = this.compute.frameCalls;
  57. this.compute.previousFrameCalls = previousComputeFrameCalls;
  58. this.render.drawCalls = 0;
  59. this.render.frameCalls = 0;
  60. this.compute.frameCalls = 0;
  61. this.render.triangles = 0;
  62. this.render.points = 0;
  63. this.render.lines = 0;
  64. }
  65. dispose() {
  66. this.reset();
  67. this.calls = 0;
  68. this.render.calls = 0;
  69. this.compute.calls = 0;
  70. this.render.timestamp = 0;
  71. this.compute.timestamp = 0;
  72. this.memory.geometries = 0;
  73. this.memory.textures = 0;
  74. }
  75. }
  76. export default Info;