Commit Graph

8 Commits

Author SHA1 Message Date
Takayuki Matsuoka
a68d0122ce BREAKING CHANGE: Introduce NextFrameIfTimedOut as a new interface method of IAwaitCaller
This is a breaking change since it introduces new interface method to IAwaitCaller.

----

NextFrameIfTimedOut() is added to IAwaitCaller.  The following inheritors also introduce the method.

- ImmediateCaller.NextFrameIfTimedOut() just invokes NextFrame().
- RuntimeOnlyAwaitCaller.NextFrameIfTimedOut() invokes NextFrame() if timed out.  Otherwise, do nothing.
- RuntimeOnlyNoThreadAwaitCaller.NextFrameIfTimedOut() works same as RuntimeOnlyAwaitCaller.

Constructor of RuntimeOnlyAwaitCaller and RuntimeOnlyNoThreadAwaitCaller
now take argument of timeout in seconds.  The default value is 1/1000 (1 milliseconds).

See also:
https://github.com/vrm-c/UniVRM/pull/1781#pullrequestreview-1100131840
2022-09-08 17:39:05 +09:00
Takayuki Matsuoka
935afcb80d Add new pseudo method NextFrameIfTimedOut to RuntimeOnlyAwaitCaller
This change adds (pseudo) method RuntimeOnlyAwaitCaller.NextFrameIfTimedOut()
which invokes NextFrame() if given time is elapsed.  Otherwise, it does nothing.

We'll be able to utilize this (pseudo) method to ease possible cause of spikes.

For example:

----
public class VRMImporterContext : ImporterContext {
  protected override async Task OnLoadHierarchy(IAwaitCaller awaitCaller, ...) {
    ...
    var blendShapeList = VRM.blendShapeMaster.blendShapeGroups;
    if (blendShapeList != null && blendShapeList.Count > 0) {
      foreach (var x in blendShapeList) {
        await awaitCaller.NextFrameIfTimeout();
        BlendShapeAvatar.Clips.Add(await LoadBlendShapeBind(awaitCaller, x, transformMeshTable));
      }
    }
    ...
  }
}
----

Note that this change doesn't add NextFrameIfTimeout() to IAwaitCaller to avoid
breaking change.  This limitation introduces extra (maybe unnecessarily) complexity.
2022-09-07 17:51:10 +09:00
ousttrue
1ca7a8684d WebGLの動作確認用 2022-07-26 14:30:51 +09:00
Masataka SUMI
92f09afdab comment 2021-10-14 21:10:08 +09:00
Masataka SUMI
7b085d9b5d make internal 2021-10-14 19:43:00 +09:00
Masataka SUMI
6f7e2b7ab4 Fix infinite loop 2021-10-14 19:33:41 +09:00
Masataka SUMI
cb1e30a195 RuntimeOnlyAwaitCaller を実装 2021-10-14 19:18:44 +09:00
Masataka SUMI
4743ad7c57 mv 2021-10-14 18:19:15 +09:00