galacean / engine-toolkit

Some out-of-the-box utility features based on the Galacean engine.
https://oasisengine.cn
MIT License
75 stars 25 forks source link

The Stats component needs to hook into the drawElementsInstanced, drawArraysInstanced, drawElementsInstancedANGLE, and drawArraysInstancedANGLE methods. #265

Open jtabibito opened 7 months ago

jtabibito commented 7 months ago

When I try to draw a mesh using GPU Instancing, the stats show 0 draw calls and 0 triangles. Here is my solution. `

if (gl instanceof WebGL2RenderingContext) {
  this.realDrawElementsInstanced = gl.drawElementsInstanced;
  this.realDrawArraysInstanced = gl.drawArraysInstanced;

  gl.drawElementsInstanced = this.hookedDrawElementsInstanced.bind(this);
  gl.drawArraysInstanced = this.hookedDrawArraysInstanced.bind(this);
} else {
  const ext = gl.getExtension("ANGLE_instanced_arrays");
  if (ext) {
    this.realDrawElementsInstanced = ext.drawElementsInstancedANGLE;
    this.realDrawArraysInstanced = ext.drawArraysInstancedANGLE;

    ext.drawElementsInstancedANGLE = this.hookedDrawElementsInstanced.bind(this);
    ext.drawArraysInstancedANGLE = this.hookedDrawArraysInstanced.bind(this);
  }
}

`