Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deprecate ready/readyPromise for terrainProviders #11033

Merged
merged 13 commits into from
Jan 31, 2023

Conversation

ggetz
Copy link
Contributor

@ggetz ggetz commented Jan 12, 2023

Part of #10909

Since we're getting rid of the readyPromise pattern, it's preferable to roll out the deprecations across the API as part of one release in order to reduce noise. I've created a staging branch to target some smaller PRs like this into.

This PR depreciates the readyPromise pattern for terrain providers. I set the deprecation period for two releases from the next one (1.104) since these are fairly high-tough areas of the API. A few other API changes consequently fall out of this deprecation, notably:

  • ready and readyPromise have been deprecated, but remain working until they are completely removed.
  • Various properties no longer throw an exception since there's no need to wait for ready
  • Where applicable, url or the relevant resource-related options have been deprecated from constructors. In their place, there are new fromUrl functions, which are asynchronous functions that resolve to a new instance of the provider after successfully requesting the required resources. This function call throws any relevant errors rather than logging it to the console or raising an error event.
  • Viewer and CesiumWidget parameters: These will now need to take promises which resolve to the terrainProvider if we'd like to keep the same setup flow
  • createWorldTerrain will need to be deprecated, as it can no longer work synchronously. I went with createWorldTerrainAsync but I'm open to naming suggestions.

Some finer points of the implementation here include:

  • Generally, a move towards using async/await syntax for flatter and more readable code
  • Adds a new async version of the toThrowDeveloperError matcher for better async testing flow
  • Making use of a builder pattern (encapsulated within the modules, not part of the public API) in order to manage a more complex object construction
  • I don't think the baseLayerPicker and Cesium Viewer app changes are the cleanest they can be, though it's probably best to address that once the imagery provider version of these changes are in.
  • It looks like in order for typescript to pass, we cannot remove the url option from the the constructor options typedef without throwing an error. Unless there is a workaround I don't know of, we'll need to note to remember to remove the property when the depreciation warnings are removed.

Finally, as a consequence of these changes, we'll definitely need to do a pass through website tutorials and ensure we're using the updated APIs. I've made the Sandcastle changes here already.

TODO:

Outside of scope for this PR:

  • Pass over async code for Sandcastles (and do we want to make the invoked wrapper function async). In particular, do a pass for race conditions when doing things like switching providers.
  • depthTestAgainstTerrain setting via BaseLayerPicker? Deprecate ready/readyPromise for terrainProviders #11033 (comment)
  • Finalize deprecation versions and open issues
  • fromUrl / Resource naming
  • Open forum thread to discuss API changes

Sorry, something went wrong.

ggetz added 4 commits January 11, 2023 13:55

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
@cesium-concierge
Copy link

Thanks for the pull request @ggetz!

  • ✔️ Signed CLA found.
  • ❔ Unit tests were not updated.
    • Make sure you've updated tests to reflect your changes, added tests for any new code, and ran the code coverage tool.

Reviewers, don't forget to make sure that:

  • Cesium Viewer works.
  • Works in 2D/CV.

@ggetz ggetz requested a review from mramato January 13, 2023 18:30
@ggetz
Copy link
Contributor Author

ggetz commented Jan 13, 2023

@mramato Would you be able to give this a pass?

@mramato
Copy link
Contributor

mramato commented Jan 14, 2023

@ggetz Will do. Thanks!

@mramato
Copy link
Contributor

mramato commented Jan 18, 2023

  • Adds a new async version of the toThrowDeveloperError matcher for better async testing flow

I haven't looked at the code yet, but modern jasmine allows you to do stuff like:

expectAsync(promimse).toBeRejectedWithError(DeveloperError);

or even

expectAsync(promimse).toBeRejectedWithError(DeveloperError, "Exact error message");

or

expectAsync(promimse).toBeRejectedWithError(DeveloperError, /regex_message_check/);

I feel that conventions in Cesium like toThrowDeveloperError are data and custom for no longer valid reasons. This isn't the PR to start changing that, but it would be nice to update the code base to start to move towards modern jasmine.

@mramato
Copy link
Contributor

mramato commented Jan 18, 2023

  • It looks like in order for typescript to pass, we cannot remove the url option from the the constructor options typedef without throwing an error. Unless there is a workaround I don't know of, we'll need to note to remember to remove the property when the depreciation warnings are removed.

Can you clarify what you mean by this. Are you talking about leaving the deprecated url property in the constructor options JSDoc so that TypeScript still includes it?

event.raiseEvent(error);
} else {
} else if (defined(provider)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to confirm, provider would always be set before and now it isn't? Or was this a bug? I see we made a lot of the parameters optional, which technically isn't a breaking change; but since these changed weren't mentioned in the PR description or in CHANGES, I figured I'd double check.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of these (message, x, y, level) were already treated as optional, so the doc comment was updated for accuracy.

provider and event were previously being passed, and this make it optional so that we can log errors without having already created the provider instance.

@mramato
Copy link
Contributor

mramato commented Jan 18, 2023

I don't have a better suggestion, but did we consider the fact that CesiumTerrainProvider.fromUrl is kind of an odd name since it also takes a Resource instance? I ask because it doesn't seem super intuitive to have code like:

const terrain = await CesiumTerrainProvider.fromUrl(IonResource.fromAssetId(1234));

Perhaps this should continue to work and in some future PR we can add CesiumTerrainProvider.fromIonAssetId as a helper function that would simplify the above and make the code more self documenting?

@mramato
Copy link
Contributor

mramato commented Jan 18, 2023

I probably won't review the specs too closely (I assume someone working on CesiumJS on a daily basis will also look at this) but don't we normally leave old deprecated tests in to ensure the old functionality still works? And then only remove them once we make the breaking change?

@mramato
Copy link
Contributor

mramato commented Jan 18, 2023

@mramato
Copy link
Contributor

mramato commented Jan 18, 2023

http://localhost:8080/Apps/Sandcastle/index.html?src=Procedural%20Terrain.html is broken as well (it doesn't load until you pick something from the combo box. i.e. it's flat at the start instead of Noise being rendered.

@mramato
Copy link
Contributor

mramato commented Jan 18, 2023

@ggetz That's all I have for my pass. This looks like it will be a great change and lead to a much cleaner API. (In addition to fixing the race conditions and unit testing issues)

@ggetz
Copy link
Contributor Author

ggetz commented Jan 18, 2023

It looks like in order for typescript to pass, we cannot remove the url option from the the constructor options typedef without throwing an error. Unless there is a workaround I don't know of, we'll need to note to remember to remove the property when the depreciation warnings are removed.
Can you clarify what you mean by this. Are you talking about leaving the deprecated url property in the constructor options JSDoc so that TypeScript still includes it?

We commonly break out the options object for constructors into there own typedef that we defined with JSDoc, ie @typedef {Object} CesiumTerrainProvider.ConstructorOptions, particularly if they are re-used, such as they are in this PR across the constructors and the new fromUrl functions. Attempting to remove the url property from the typedef causes our typescript generation step to throw errors since options.url is still being accessed in the deprecated code paths.

To be clear that this property is deprecated now, I have instead marked the property as optional and added a short note that the property is deprecated. I can also look deeper to see if there is a way to avoid the error if it jumps out as unusual.

I feel that conventions in Cesium like toThrowDeveloperError are data and custom for no longer valid reasons. This isn't the PR to start changing that, but it would be nice to update the code base to start to move towards modern jasmine.

Generally, this PR does start moving towards this convention. The main motivation for a custom toThrowDeveloper matcher now is that it becomes a noop in the release tests. Otherwise in the case of RuntimeErrors, we use expectAsync(promise).toBeRejectedWithError(RuntimeError, "Exact error message");

but don't we normally leave old deprecated tests in to ensure the old functionality still works?

My mistake; I did verify that the old tests were working before changing them to the new APIs. Easy to put them back in.

@ggetz
Copy link
Contributor Author

ggetz commented Jan 19, 2023

@mramato

http://localhost:8080/Apps/Sandcastle/index.html?src=I3S%20Feature%20Picking.html seems to be broken?

How so? Running this locally looks exactly the same as https://sandcastle.cesium.com/?src=3D%20Tiles%20Feature%20Picking.html on my machine.

@mramato
Copy link
Contributor

mramato commented Jan 19, 2023

It wasn't loading the tileset at all for me. I'll try again and confirm.

@ggetz
Copy link
Contributor Author

ggetz commented Jan 19, 2023

Updated to move all the asynchronous calls to the top level for the app level to await and handle errors. As a consequence, a lot of the Sandcastle code is now surrounded by an async function block. I added try/catch to the more minimal examples concentrating on terrain providers. I'd expect more Sandcastle changes to come as we finish up the rest of the ready promise deprecations throughout the codebase, and then we can do a final pass.

@kring
Copy link
Member

kring commented Jan 26, 2023

I apologize in advance for this, because it's going to be pretty annoying, especially this late... but, I don't really think this is the right direction for the API...

With this change, imagery providers, terrain providers, and other things can only be constructed asynchronously (ignoring unlikely scenarios where the caller happens to have all the data needed to construct it synchronously). And there's a fromUrl factory function to do the async construction.

The problem is that this is super hard for users to deal with. Particularly users who don't understand promises or async/await very deeply, which is many (most?) of them. And even for those who do, the asynchronicity is a huge source of complexity and therefore bugs.

If the only (practical) way to construct an ImageryProvider is with a function that returns a promise, then we only have a few patterns that can be used to add that imagery provider to the globe:

Wait for the imagery provider, then add it to the globe

Something like:

const imageryProvider = await WebMapServiceImageryProvider.fromUrl(...);
globe.imageryProviders.add(imageryProvider);

Which looks innocent enough, but now this entire operation is asynchronous. The user just clicked a button to add this WMS layer, let's say. Do we make them look at an hourglass while we complete this async operation? If not, what if the user changes their mind and wants to remove it before the async operation has completed? There are ways to deal with this, but it is super fiddly and easy to get wrong.

Allow a Promise<ImageryProvider> to be added directly

Something like:

globe.imageryProviders.add(WebMapServiceImageryProvider.fromUrl(...));

But now the imageryProviders collection has a mix of real imagery providers and promises for imagery providers. In TypeScript this is awkward in the type system. Without TypeScript its a recipe for runtime errors when someone writes code without remembering that the elements can sometimes be promises.

Make creation of the entire globe async

We can wait for this promise to complete constructing the viewer. The example in the CesiumTerrainProvider docs in this branch suggests this pattern for use with a terrain provder:

const viewer = new Cesium.Viewer("cesiumContainer", {
  terrainProvider: await Cesium.CesiumTerrainProvider.fromUrl(
    Cesium.IonResource.fromAssetId(3956), {
      requestVertexNormals: true
    });

It's a bit subtle at a glance, but in this pattern the Cesium.Viewer won't be constructed until the terrain provider is constructed asynchronously. Maybe not a huge problem for a terrain provider, but for things that are meant to be layered on top, like overlay imagery layers and some 3D Tilesets, it's a step backwards versus showing the globe more quickly and then adding other data when it's available.


Ok, so what's the alternative? I think the right solution is the pattern we eventually landed on in cesium-native: separate the factory from the asynchronously-created provider. In cesium-native, the "imagery provider" is called RasterOverlay. Raster overlays can be constructed synchronously, but they can't provide tiles directly. Instead, someone who wants tiles (usually the rest of cesium-native itself) calls createTileProvider on the raster overlay. This method returns a promise for a RasterOverlayTileProvider.

In some sense this isn't so different from what's implemented here. It's just a factory class that can asynchronously create a tile provider, rather than a factory function that can asynchronously create a tile provider. But in another sense, it makes all the difference. It means that users can easily create new imagery providers, terrain provider, tilesets, etc. and add them to the globe immediately. And when they inspect the appropriate properties on the globe or whatever, they get the same instances back.

Errors are handled by whoever calls createTileProvider, which is usually code written by us so we can deal with the complexity of the asynchronicity. Errors can be surfaced to users as events. Events can also be used to inform users when async operations have completed.

IMO this will be much easier for our users to deal with than async factory functions.

@mramato
Copy link
Contributor

mramato commented Jan 26, 2023

Thanks, @kring. Not that me and you are deeply involved lately, but we built CesiumJS on "disagree and commit" so it's never too late to speak up. 😄 Obviously everyone wants the best approach to win.

Just to keep our eye on the prize. Ultimately the problem here is that CesiumJS has a bunch of unknowable/unawaitable asynchronicity happening under the hood in the "middle" of the stack. That's what leads to problems in #10909 and the fact that Cesium CI just randomly fails these days due to unhandled promises.

This PR (based on conversations I had with Gabby) pushes all of the async code to the top of the stack. Kevin's idea seems to be to go to the complete opposite direction and push it further into the engine and use events to bubble errors back up to the top.

I think both concepts are equally valid and can both be used to achieve the intended goal, making sure all async operations are "knowable" and "awaitable". However I am biased towards the approach this PR originally took.

The problem is that this is super hard for users to deal with. Particularly users who don't understand promises or async/await very deeply, which is many (most?) of them. And even for those who do, the asynchronicity is a huge source of complexity and therefore bugs.

I would want to see some data to back up this assertion. This may have been true 10 years ago, but promises/async/await are now at the core of JS development. Everyone uses them, everyone knows enough about them for them not to be some weird new concept like when we introduced them into CesiumJS' code base. They are bog standard JS.

The user just clicked a button to add this WMS layer, let's say. Do we make them look at an hourglass while we complete this async operation?

Browser apps are async by nature since a lot of operations are reaching back to the server. As an extreme example, every single letter you type into Google Docs makes a network request. Almost all JS apps and frameworks have opinionated ways for dealing with this. Old school hourglasses like you suggest, optimistic + rollback, or some other form of async error handling. Ultimately my point is that async in a web app is not the big lift you seem to be painting it as.

Errors are handled by whoever calls createTileProvider

What is multiple people need to tile provider and it's not clear who will get to it first? Do people create multiple providers rather than sharing a single one? What about when a user is the first one that needs the tile provider? It sounds like now you're pushing the async handling on them anyway.

Errors can be surfaced to users as events.

To me, this seems like it would be more confusing to most users than just using async/await. Ultimately what your suggesting sounds very C++/thick client approach to me. Which works great in those environments but would be less expected in JavaScript.

Also, Kevin's approach sounds like a bigger refactor to me? (though maybe it's not).

In my experience taking other JS apps with this problem and pushing things up to the top of the stack always ended up being a big improvement. The more potential async code you can remove each frame, the better.

Ultimately, it's up to @ggetz and the CesiumJS team to make this decision, as long as apps built on Cesium ensure all async operations are knowable/awaitable, it will be an improvement over what we have now and I'll be happy.

@ggetz
Copy link
Contributor Author

ggetz commented Jan 26, 2023

I'll start with the thought that I'm clearly biased towards the solution which is already in motion... 😆 I'm generally in favor of moving the up the stack to let the user of the library decide what is right for their app.

The problem is that this is super hard for users to deal with. Particularly users who don't understand promises or async/await very deeply, which is many (most?) of them. And even for those who do, the asynchronicity is a huge source of complexity and therefore bugs.

If we do proceed with exposing the async functionality, I do think the onus is on us to make sure we are properly instructing devs how to use the async functionality. So updating our examples to make it clear how to construct any providers, properly handling errors, etc.

From a maintainability standpoint, I don't think we've been great about handling all the errors that may pop up throughout the stack, which has lead to bugs, especially intermittent ones. As #10909 points out, this new structure makes thing much more testable, especially since asynchronous code has become a part of testing libraries like jasmine.

The user just clicked a button to add this WMS layer, let's say. Do we make them look at an hourglass while we complete this async operation? If not, what if the user changes their mind and wants to remove it before the async operation has completed? There are ways to deal with this, but it is super fiddly and easy to get wrong.

I do think handling asynchronous state management is a common paradigm in web development. For example in some of our other apps we've been working on at Cesium, we've been working with Redux where there are helper functions which abstract the recommend approach for handling async requests.

separate the factory from the asynchronously-created provider

It may be worth pointing out (and I may be totally off base with this since I'm not very involved with the C++ world), I do think a C++ and JS implementation will look different when it comes to handling asynchronous code. Promises and async code are a standard part of modern JS, and while std::future exists, I don't think its used as ubiquitously as promises in JS.

If I correctly understand the RasterOverlay and RasterOverlayTileProvider pattern, we would basically want an additional class that lives on top of the existing provider that handles errors and dispatches events, correct? I don't think that precludes the approach here, but it would require that we add that top level RasterOverlay abstraction before shipping this update.

Ultimately, I'm leaning on the side of staying leaner and foregoing that RasterOverlay abstraction, as it will give the user better flexibility in their own apps, and will give us less API area to maintain.

Perhaps in the future, as declarative paradigms are becoming more common in the JS world, we may re-introduce that level of abstraction in the to provide a better interface for event-driven apps, but I'm not sure that's the right choice for the library as it is today.

@jjhembd
Copy link
Contributor

jjhembd commented Jan 26, 2023

@kring, I agree that the last pattern ("Make creation of the entire globe async") is often not a good one, for the reasons you mentioned:

for things that are meant to be layered on top, like overlay imagery layers and some 3D Tilesets, it's a step backwards versus showing the globe more quickly and then adding other data when it's available.

However, this can still be addressed with the following pattern, lifted from the "Terrain Performance" Sandcastle: (it's another version of your first pattern, "Wait... then add it to the globe".)

        const viewer = new Cesium.Viewer("cesiumContainer", {});

        (async () => {
          try {
            viewer.terrainProvider = await Cesium.createWorldTerrainAsync();
          } catch (error) {
            console.log(error);
          }
        })();

        // ... do more stuff with viewer, while the terrainProvider is still loading ...

Code that depends on terrainProvider actually being loaded, now has to go inside the async function. Previously, it had to go inside terrainProvider.readyPromise.then(...).

From the app developer's point of view, I think either approach requires a similar level of async understanding to code correctly. But the new pattern better handles coding mistakes. The old approach depended on things like this internally:

  if (!this._ready) {
    throw new DeveloperError(
      "requestTileGeometry must not be called before the terrain provider is ready."
    );
  }

and on the hope that we had these errors in all the right places, and they were documented, and the user read all the documentation...

@jjhembd
Copy link
Contributor

jjhembd commented Jan 26, 2023

@ggetz, sorry if I missed something, but are we planning to clean up more of the .readyPromise usage in the specs in this PR? I understand we still want to test the deprecated methods, but there are unrelated tests like this one in CesiumTerrainProviderSpec

  it("returns reasonable geometric error for various levels", function () {
    returnQuantizedMeshTileJson();

    const provider = new CesiumTerrainProvider({
      url: "made/up/url",
    });

    return provider.readyPromise.then(function () {
      expect(provider.getLevelMaximumGeometricError(0)).toBeGreaterThan(0.0);

Also, the calls to pollToPromise are using the deprecated .ready property

@mramato
Copy link
Contributor

mramato commented Jan 26, 2023

(async () => {

I'll also point out that in modern JS, top-level await means no weird wrapping of async stuff.

@jjhembd
Copy link
Contributor

jjhembd commented Jan 26, 2023

no weird wrapping of async stuff.

It does look weird, and made me question the new API at first. But on the other hand, without wrapping it, what if the terrain provider hangs? How could we make sure the rest of the app is still usable? The wrapping lets the rest of the function execute in the meantime.

@ggetz
Copy link
Contributor Author

ggetz commented Jan 26, 2023

I understand we still want to test the deprecated methods, but there are unrelated tests like this one in CesiumTerrainProviderSpec

I swung the opposite way to prove that all the correct properties were still being set on created such that these tests continued to work. But based the coding guide (emphasis mine) they should get switched over.

Remove all use of the deprecated API inside Cesium except for unit tests that specifically test the deprecated API

The test will certainly be briefer with the new API, so I'm not against switching it. I'll update.

@kring
Copy link
Member

kring commented Jan 26, 2023

I would want to see some data to back up this assertion. This may have been true 10 years ago, but promises/async/await are now at the core of JS development. Everyone uses them, everyone knows enough about them for them not to be some weird new concept like when we introduced them into CesiumJS' code base. They are bog standard JS.

I used to interview JS developers with a question based around promises. Use async/await if you want, totally open book. I'd even answer any questions you had about promises, their API, how they work, whatever. It was very very rare that someone did well on it. Even people that had experience using async/await and promises seemed to have a very shaky understanding of what they actually did. I'm sure this situation is improving, but the fact remains that this stuff is hard and most of the time you don't need to understand it very deeply to be a competent JS developer.

What is multiple people need to tile provider and it's not clear who will get to it first? Do people create multiple providers rather than sharing a single one? What about when a user is the first one that needs the tile provider? It sounds like now you're pushing the async handling on them anyway.

These questions seem really academic. In virtually all Cesium applications, the only client of tile providers is Cesium itself. Users create them to tell Cesium what to show on the globe, but never "use" them otherwise.

If a user does want a tile provider themselves for some reason, then yes, they need to deal with the asynchronicity. That's a far more advanced scenario than "I want to show my WMS layer on this map."

From a maintainability standpoint, I don't think we've been great about handling all the errors that may pop up throughout the stack, which has lead to bugs, especially intermittent ones. As #10909 points out, this new structure makes thing much more testable, especially since asynchronous code has become a part of testing libraries like jasmine.

I can see your point about it making Cesium easier to test, but I think it's doing that at the cost of being harder to use.

And it doesn't do anything to guarantee errors are handled. Before, there was a readyPromise available as a property, and we forgot to use it. Now the promise is returned by value, but if we don't handle possible promise rejection, we're no better off. In my proposal, only Cesium has to handle the promise rejection in almost all scenarios. Users don't need to worry about it.

It may be worth pointing out (and I may be totally off base with this since I'm not very involved with the C++ world), I do think a C++ and JS implementation will look different when it comes to handling asynchronous code. Promises and async code are a standard part of modern JS, and while std::future exists, I don't think its used as ubiquitously as promises in JS.

This general idea, "C++ is different", was mentioned a few times. But cesium-native's async system is very much modeled on javascript promises. I don't think this is a valid way to dismiss the proposal.

If I correctly understand the RasterOverlay and RasterOverlayTileProvider pattern, we would basically want an additional class that lives on top of the existing provider that handles errors and dispatches events, correct?

No, the RasterOverlay doesn't handle errors and dispatch events. The client does, meaning the ImageryLayerCollection or globe or similar. The RasterOverlay is a configurable factory for a tile provider. Pretty similar to the TerrainProviderBuilder actually.

I think @jjhembd's example illustrates my overall point really well, so let's walk through it... He proposed:

const viewer = new Cesium.Viewer("cesiumContainer", {});

(async () => {
  try {
    viewer.terrainProvider = await Cesium.createWorldTerrainAsync();
  } catch (error) {
    console.log(error);
  }
})();

// ... do more stuff with viewer, while the terrainProvider is still loading ...

Let's shift this to a real-world example. I have an application that's showing a globe (terrain) and a base layer. And my app allows users to enable a WMS overlay on top of that. So my viewer already exists, and I'm writing a function to add the WMS layer, following Jeshurun's pattern and meant to be called in a click handler or whatever. It looks like this:

function addFancyOverlayToTheGlobe(viewer) {
  (async () => {
    try {
      viewer.imagery.add(await WebMapServiceImageryProvider.fromUrl(...));
    } catch (error) {
      console.log(error);
    }
  })();
}

Of course I could make this an async function itself and return a promise, but then the client needs to be willing to deal with it. If this is a simple click handler or similar, the buck needs to stop here.

Now when the user clicks this button, we start the process of adding the WMS overlay, and sometime later it actually happens. The application needs to keep track of this "something is being added to the globe" state in order to show the user that something is happening, because Cesium doesn't know about it; it's hidden in a continuation. If you ask Cesium which WMS layers are on the globe, this one won't show up yet.

Now what if this isn't an "add button", but a checkbox. The user can toggle the overlay on and off. Super common thing, right? We'd need some way of stopping this async operation later. Maybe something like:

function addFancyOverlayToTheGlobe(viewer) {
  (async () => {
    try {
      const provider = await WebMapServiceImageryProvider.fromUrl(...);
      if (overlayIsStillShown()) {
        viewer.imagery.add(overlay);
      }
    } catch (error) {
      console.log(error);
    }
  })();
}

Hmm ok, now what if the user toggles it on, off, then on again before the fromUrl completes?

What if the user does something that causes the viewer to be destroyed before the fromUrl completes?

These are all tractable problems, but they're the sort of thing developers are extremely likely not to think about. And this is a typical, bog standard, simplest sort of thing you can go with CesiumJS scenario here!

The fundamental problem is that users don't (and shouldn't) view imagery provider creation as an async operation that will complete later. They view it as a description to Cesium of what should be shown on their globe. Add an imagery provider to the globe, and it should appear (eventually). Remove the imagery provider, and it should disappear.

And this is what the RasterOverlay system achieves. But let's stick to CesiumJS's terminology to try to be less confusing. Here's what I'm proposing users should be able to do:

// note: Imagery, not ImageryProvider
// This is lightweight and doesn't do any network requests
const fancyOverlay = new WebMapServiceImagery(...);

function addFancyOverlayToTheGlobe(viewer) {
  viewer.imagery.add(fancyOverlay);
}

function removeFancyOverlayFromTheGlobe(viewer) {
  viewer.imagery.remove(fancyOverlay);
}

All of the async creation of a tile provider, as well as the async requesting of tiles, is handled by the Viewer / Globe / ImageryLayerCollection.

If users need to be notified of imagery provider errors, beyond just showing the error to the user (which should be the default), they can subscribe to an event. A simple API can also be used to query the status of the imagery: is it still doing the initial load? are tile requests in progress? did something go wrong?

Writing tests is just as easy as it is in this PR. Call createTileProvider directly (if you need it), and handle the returned promise's resolution or rejection. But the experience for a typical user of CesiumJS is greatly improved.

@ggetz
Copy link
Contributor Author

ggetz commented Jan 27, 2023

The application needs to keep track of this "something is being added to the globe" state in order to show the user that something is happening, because Cesium doesn't know about it; it's hidden in a continuation.

I guess the fundamental question here is whether CesiumJS should be what's tracking the state of your application. IMO no– CesiumJS already is a huge library that does a lot, plus there are plenty of other solutions that developers may want to use here instead.

If users need to be notified of imagery provider errors, beyond just showing the error to the user (which should be the default), they can subscribe to an event. A simple API can also be used to query the status of the imagery: is it still doing the initial load? are tile requests in progress? did something go wrong?

The async functionality that is brought up the stack here is the initial metadata load, not subsequent tile requests. Those continue to use an event and are logged to the console by default. By moving the initial metadata load to the forefront, the developer does need to deal will whether or not the layer was created, which is something that should likely be communicated to the app user directly, not hidden in the console. Or, as you said, they can ignore any errors and they will be in a similar situation as they are now with the readyPromises.

I'm worried about just how much code the proposed alternative would add to keep this pattern consistant for the areas we use ready promises now: Terrain providers, imagery providers, 3D Tiles, models, voxels, etc...

AFAIK, I'm not aware of another 3D JS library that implements a similar pattern where the library attempt to handle the application state. Babylon implements an async factory function for asset loading like we have here. Same with PixiJS. ThreeJS has a callback pattern for their asset loading.

@kring
Copy link
Member

kring commented Jan 28, 2023

I guess the fundamental question here is whether CesiumJS should be what's tracking the state of your application.

I disagree. The fundamental question here is whether this change makes CesiumJS harder to use.

IMO no– CesiumJS already is a huge library that does a lot, plus there are plenty of other solutions that developers may want to use here instead.

I hope I haven't given the impression that I think CesiumJS should be responsible for all of an application's state. That seems a bit of a strawman.

But CesiumJS is certainly not some immediate-mode application where the developer is responsible for managing all loading and then dispatching things to be rendered each frame. It's extremely stateful. Comparing terrain providers, imagery providers, 3D Tilesets, and even geometries to simple "load once" async resources in other engines is not really fair.

But I feel like I'm shouting into the wind here, so how about this... If you want hard evidence that these changes make CesiumJS too hard to use correctly, you need look no further than the Sandcastle code in this branch, where we can easily find an example of it being used incorrectly in exactly the way I'm worried about!

Let's look at the Terrain Sandcastle example. First I'd like to point out that the viewer construction code went from this:

const worldTerrain = Cesium.createWorldTerrain({
  requestWaterMask: true,
  requestVertexNormals: true,
});
const viewer = new Cesium.Viewer("cesiumContainer", {
  terrainProvider: worldTerrain,
});

To this:

const viewer = new Cesium.Viewer("cesiumContainer");
(async () => {
  try {
    viewer.terrainProvider = await Cesium.createWorldTerrainAsync({
      requestWaterMask: true,
      requestVertexNormals: true,
    });
  } catch (error) {
    console.log(error);
  }
})();

Which seems like a huge step back in usability right there. And it's not like it's any safer or handling errors better, either. But let's move on from that and talk about the actual bug.

This Sandcastle example has a dropdown that allows the user to select a terrain provider. The onselect handler for each constructs the appropriate terrain provider, awaits it, and then sets it as the viewer's terrainProvider property. Seems simple enough, right?

Except it has a serious race condition. If I select the VRTheWorldTerrainProvider (which is a slower one from here in Australia), and then very quickly switch to ArcGISTerrainProvider (just because it's the next one up so it's easy to switch to it quickly), the UI will indicate I'm looking at ArcGISTerrainProvider while I'm actually looking at VR The World. I was able to make this happen quite easily within a couple of tries (I confirmed it with the Network tab).

So this is a rather subtle - but potentially very serious! - bug. It didn't happen before this PR. In fact, it would have been quite hard to do it accidentally. Now, with this PR, it's not only extremely easy to do this accidentally (even the world experts in CesiumJS development made this mistake!), but it's also quite difficult to fix. At the very least, the Sandcastle example would get significantly more complicated if we were to fix this.

And this isn't some quirk of Sandcastle. Virtually any CesiumJS app - especially the simpler ones - are likely to run into problems like this.

Now, you don't have to like my solution, but can we at least agree there's a problem?

@mramato
Copy link
Contributor

mramato commented Jan 28, 2023

Which seems like a huge step back in usability right there.

This is a symptom of Sandcastle (which was mentioned up thread as something we should fix) and not a problem elsewhere. Top level await means that the "good" example you posted works in the new API as well, simply by adding await to the call:

const worldTerrain = await Cesium.createWorldTerrainAsync({
  requestWaterMask: true,
  requestVertexNormals: true,
});
const viewer = new Cesium.Viewer("cesiumContainer", {
  terrainProvider: worldTerrain,
});

Also, even without top-level and without this change, it's fairly typical for an application to reach out to a server during initialization, so I don't see how this is much different. Most JS apps already have code dealing with asynchronousness at this level.

I was able to make this happen quite easily within a couple of tries (I confirmed it with the Network tab).

Yes, this is definitely a bug that should be fixed in our widgets. Thanks for bringing it up. This is a branch PR going into the staging branch so there is certainly a list of remaining TODOs that needs to be generated before it goes into main. But the components themselves already have to manage state (like which provider is selected) so I'm not sure why dealing with the async nature suddenly changes everything? As @ggetz mentioned, every modern toolkit out there has async state handling. CesiumJS widgets are definitely not "modern" but I don't see this as a major problem that has technical barriers.

@kring
Copy link
Member

kring commented Jan 29, 2023

I'm not sure what you're talking about, Matt. This isn't a problem with Sandcastle or "our widgets". Sandcastle.addToolbarMenu is a thin wrapper over a standard HTML select element. It's meant to be a convenience, not an abstraction. Yes, I don't doubt you can framework your way out of this bug, but I'm not really sure how you plan to fix it without introducing some abstractions that would be wildly inappropriate in the context of Sandcastle.

But I'm interested to see what you have in mind; please prove me wrong.

I'm writing too much and I'm not sure it's really being read well (I get it, everyone is super busy, Kevin is super noisy), but a couple of really brief things:

  1. We need to run this change by the community. Probably not with just terrain providers, because no one cares. But once we have imagery providers following this pattern, we definitely need to let the community try it out before we ship it. This may very well be the biggest breaking change in CesiumJS's history; the community deserves to be involved.

  2. I'll try to find some time to prototype the alternate architecture I'm blabbering about, just so you all can see it concretely. IMO it has all the advantages of what's in this PR while not being a breaking change for users (other than users writing their own terrain and imagery providers and that sort of thing), and is in general much easier to use. And it's really not a lot of extra code; very similar to the Builder thing already going on in this PR, actually.

@ggetz
Copy link
Contributor Author

ggetz commented Jan 31, 2023

I agree that we should give the community at heads up about this planned change and listen to potential feedback. We'll open a forum thread shortly. This isn't going out with the February 1st release, though I wouldn't like to delay it much longer.

In the meantime, I think we should proceed with getting this PR into a staging branch. From there, we can make further changes such as the imagery providers and have something more concrete to share with the community. @kring We'll still welcome feedback and comments such as your prototype architecture if you end up having the time.

As I mentioned further up in this PR, I don't expect this PR to be the final iteration through Sandcastle code or our own widgets. I think the comment about onSelect and a few other scenarios are valid, but can be handled and discussed further in a later PR. Also there no need to use a framework to solve these problems. My point was more about how entrenched the async pattern is is the JS ecosystem.

@jjhembd
Copy link
Contributor

jjhembd commented Jan 31, 2023

Thanks @kring for pointing out the issue with the Terrain Sandcastle.

Loading a new Terrain is inherently async, but the current Cesium behavior stubs in a non-functional provider while a new one is loading. On my machine, with the network throttled, the stub makes the globe disappear for a few seconds. I agree this might be less misleading than continuing to show the previous terrain in the meantime. (A non-blocking "Loading" message might be even better, since the user would still be able to use the rest of the app.)

We already have a TODO item to fix these kinds of issues in Sandcastle. And as you mentioned, imagery providers will provide a better use-case to discuss the new API with the community.

I'll merge this in for now, but please continue the discussion as we work on the imagery providers.

@jjhembd jjhembd merged commit b5233df into no-ready-promises Jan 31, 2023
@jjhembd jjhembd deleted the terrain-ready-promise branch January 31, 2023 17:25
@ggetz ggetz mentioned this pull request Jan 31, 2023
10 tasks
@shunter
Copy link
Contributor

shunter commented Jan 31, 2023

As a casual reader of the discussion here, I think the distinction in my mind is that configuration should be synchronous where possible, even when the actual execution is asynchronous.

Top-level await doesn't really improve the situation because you've just made your configuration be blocked by execution, which leads to the performance consequences Kevin alludes to.

"Configuration" in this context refers to the information needed to create a Viewer (and more broadly set up the rest of the application). In this case the information is "I want to use World Terrain (from a given location or whatever)". You don't need any actual data to be loaded from the server to communicate that, generally speaking. So yeah, as Kevin says above, that essentially boils down to a factory. Maybe a bit more if it's going to keep track of created instances, or report information about their state (e.g. failure state).

I admit I don't really have a stake here these days, but at least I can say you're not "shouting into the wind", Kevin.

@kring
Copy link
Member

kring commented Jan 31, 2023

Well, said, Scott. That's a good way to frame it. Have I mentioned lately that I miss working with you? :)

@kring
Copy link
Member

kring commented Jan 31, 2023

Loading a new Terrain is inherently async, but the current Cesium behavior stubs in a non-functional provider while a new one is loading. On my machine, with the network throttled, the stub makes the globe disappear for a few seconds. I agree this might be less misleading than continuing to show the previous terrain in the meantime.

This is a really interesting point, it definitely gave me pause. But after thinking about it a bit, I want to note two things about it:

  1. This effect, "the globe disappears when we switch terrain providers", actually happens after the changes in this PR, too. It just might disappear for a briefer period of time. Because even if the terrain provider itself is ready to go, the globe won't appear until the root tiles are downloaded, and the old globe disappears before that happens in either case.
  2. An advanced user can reduce the "no globe" time in the old readyPromise pattern too, making it as short as it is in this PR, if they want to. Something like this (not tested):
const newTerrainProvider = new CesiumTerrainProvider(...);
newTerrainProvider.readyPromise.then(() => {
   viewer.terrainProvider = newTerrainProvider;
});

This comes with all the same dangers as in the forced-async pattern in this PR, of course, but at least in this case it's an advanced user opting in.

We already have a TODO item to fix these kinds of issues in Sandcastle. And as you mentioned, imagery providers will provide a better use-case to discuss the new API with the community.

Ok that's fine but I don't think this is "oh yeah we just need to go back and fix Sandcastle, no big deal." This is exposing a major problem with this pattern, because there is no reasonable solution. Maybe I'm wrong about that, but I think it'd be wise to prove me wrong before spending a lot more time implementing this pattern, because if I'm right we're going to be throwing away a lot of code.

@ggetz
Copy link
Contributor Author

ggetz commented Feb 1, 2023

but I think it'd be wise to prove me wrong before spending a lot more time implementing this pattern, because if I'm right we're going to be throwing away a lot of code.

I think it's a fair point to discuss how developers may use the API overall and what additional steps we might consider taking to simplify it, especially at configuration time as @shunter calls out.

Though if we do choose to make adjustments there, I don't think the will mean throwing away the majority of the code in this branch. readyPromise is still an anti-pattern and the team wants to get rid of it throughout the API.

  • This pattern allows us to more easily update tests such that we can get rid of some asynchronous failures as mentioned in Race condition in Cesium3DTileset / Reconsider readyPromise pattern #10909.
  • Even assuming we fix all the underlying asynchronous issues in the middle of the stack and the tests, the readyPromise pattern sets a bad precedent as we've seen it become abused in other parts of the code over time.
  • Even if we do simplify the most common path, why wouldn't we be able to continue to expose this new async API for users who specifically want to opt into a different control flow? There's a use case for this as mentioned in your above comment.

@ggetz
Copy link
Contributor Author

ggetz commented Feb 3, 2023

@jjhembd @kring

I was thinking through what we could do to simply terrain (and eventually something similar for imagery) provider creation for users who do not want to dive into the async flow, while still preserving the .fromXYZ factory functions for those users who do. While the approach is different then what @kring was suggesting with the RasterOverlay system, here's the start of what I was thinking. Terrain is a new object that handles the async error handling and exposes an error event and a ready event. One plus here is it's more compatible with event-driven UIs then readyPromise was.

This is then handled by Viewer (and eventually the base layer picker and perhaps CesiumWidget). This also restores the behavior that exists in main such that the existing terrain immediately disappears when setting the new Terrain object. (This does make the "placeholder" terrainProvider more explicit by setting it to undefined, but I think this make it clearer what's happening under the hood. @jjhemb mentioned this was a point of confusion for him regarding EllipsoidTerrainProvider vs undefined values for the terrain provider.) This also handles "competing" values, like when setting a terrain provider and then immediately setting another.

One downside of this approach is that (without TypeScript) it's not possible to confirm that a promise resolves to the expected type during object creation. However, there are many other areas of the code where this is the case, and hopefully won't be a concern if/when we move to TypeScript. I believe this wouldn't be an issue with the RasterOverlay approach, but I think the approach here is a bit less drastic of a change to the API overall, which was the intention.

@kring
Copy link
Member

kring commented Feb 6, 2023

That's interesting @ggetz, but it's still a big step back from both the current implementation and my proposed factory (raster overlay) implementation. Specifically:

  1. After calling setTerrain, there's no outward appearance on Globe/CesiumWidget/Viewer that anything is happening, and
  2. If a user calls setTerrain, and then sets the terrainProvider explicitly, the latter action will eventually get clobbered by the former one. It's a less likely race condition, but still a fairly annoying one.

Also lots of Cesium apps can and should avoid using Viewer, so it's inappropriate to put this logic there IMO. But that's probably easy to fix.

I really don't think the factory is a big lift, especially when we're already creating factories (Builder). There's no reason to rush to weaker designs just to avoid it. I guess I just need to prototype it to demonstrate that.

@ggetz
Copy link
Contributor Author

ggetz commented Feb 6, 2023

After calling setTerrain, there's no outward appearance on Globe/CesiumWidget/Viewer that anything is happening

There should be. That example implements the same "the globe disappears when we switch terrain providers" visual behavior as the existing API. Is there another visual indicator you were looking for that the terrain provider is changing?

If a user calls setTerrain, and then sets the terrainProvider explicitly, the latter action will eventually get clobbered by the former one. It's a less likely race condition, but still a fairly annoying one.

Good point, but this seems like a fairly straightforward fix– Remove the ready event listener if terrainProvider is set directly after setTerrain is called.

Also lots of Cesium apps can and should avoid using Viewer, so it's inappropriate to put this logic there IMO. But that's probably easy to fix.

I agree that most apps should not be using viewer. But as I stated in the comment this does not need to be exclusive to the viewer. We would likely add this functionality to CesiumWidget as well, and in doing so it probably makes sense to move the main logic there. I was hoping this abstraction could live entirely on the Widget layer, but it could be argued this may instead belong in Scene. But as you mention, that's an easy fix.

But I don't see why we shouldn't expose the functionality in Viewer at all though though, especially since it already exposes setting the terrainProvider property.

ssqgrand pushed a commit to ssqgrand/cesium that referenced this pull request Apr 12, 2023
commit 528bbd9273622f659f1f20f1b6e5fb60884e4d8e
Merge: b384fa0d14 05c225561a
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Apr 11 14:26:19 2023 -0400

    Merge pull request #11215 from bbbbx/main

    Fix rendering of emissive model

commit 05c225561a6149d3f41df018edb092ac73909380
Author: bbbbx <venus@venusworld.cn>
Date:   Wed Apr 12 00:41:13 2023 +0800

    Add unit test

commit 05a6ae1ca48e2b3656e0ef7fb61a10395dbc78c8
Author: bbbbx <venus@venusworld.cn>
Date:   Tue Apr 11 21:01:06 2023 +0800

    Update changelog

commit 6f1083e6ceff86ff9adb4a4f111c563e00998a4d
Author: bbbbx <venus@venusworld.cn>
Date:   Tue Apr 11 20:37:46 2023 +0800

    Fix rendering of emissive model

commit b384fa0d147864fff20ef4bf267fef17fafb1c39
Merge: be5ea7458d 7c692f710f
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Apr 10 15:45:28 2023 -0400

    Merge pull request #11221 from lanvada/fix_comments

    Fix some comments of Cesium3DTileset and Viewer

commit 7c692f710fc7e44e974b5e0ecaa20450b3c5ff10
Author: HuZehua <hzh@bimquan.com>
Date:   Mon Apr 10 14:26:58 2023 +0800

    Fix some comments of Cesium3DTileset and Viewer

commit be5ea7458d5f95261740679525cf9361f133fcda
Merge: 5064f1093f 91585ff660
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Apr 7 16:56:34 2023 -0400

    Merge pull request #11213 from romejoe-org/contextoptions-fix

    ContextOptions TypeScript fix

commit 91585ff6606168eed4b9e316d0c012ca684312ad
Author: Joe Stanton <jsromejoe@gmail.com>
Date:   Fri Apr 7 19:25:32 2023 +0000

    Ran prettier to fix formatting

commit e4d0525f3610b295960dfc13897b2eae6b4ecc44
Author: Joe Stanton <jsromejoe@gmail.com>
Date:   Fri Apr 7 14:12:40 2023 -0400

    Updated Changes.md indicating 10963 was fixed

commit b94a9ad72b6ef3fae5652cfb8b5d7ff25dce56e5
Merge: d6183e7e6c 5064f1093f
Author: Joe Stanton <jsromejoe@gmail.com>
Date:   Fri Apr 7 14:07:38 2023 -0400

    Merge branch 'CesiumGS:main' into contextoptions-fix

commit 5064f1093fd9b2d63c3a52997902c3c25e6ab5a5
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Apr 7 14:03:00 2023 -0400

    Fix CHANGES.md header

commit 7a3a7e721fdf66573a9e2770e5412ce33cdb9790
Merge: 4503f09f6e 390e0b91f3
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Apr 7 14:01:56 2023 -0400

    Merge pull request #11109 from glathoud/glathoud-patch-1-atmosphere-performance

    Performance improvement

commit 4503f09f6e5759feb82498c3b15dbffd1f391683
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Apr 7 13:45:20 2023 -0400

    Skip coverage deploys for forks

commit 6fee3095c08650d81f0deab114a276898226c87c
Merge: 5ee51861f5 45c5ad5e56
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Apr 7 13:07:22 2023 -0400

    Merge pull request #11217 from javagl/imagery-provider-proxy-fix

    Fix scope of proxy definition

commit 45c5ad5e56b5b2cae84ea2920ce64ae34aa9e887
Author: Marco Hutter <javagl@javagl.de>
Date:   Fri Apr 7 17:52:31 2023 +0200

    Fix scope of proxy definition

commit d6183e7e6cd0b36be6840efeb79298bd0a20a3ad
Author: Joe Stanton <jsromejoe@gmail.com>
Date:   Wed Apr 5 14:27:03 2023 -0400

    Update CONTRIBUTORS.md

commit 91cde95783d8ca1ac1a87f54104fbe390196f806
Author: Joe Stanton <jsromejoe@gmail.com>
Date:   Wed Apr 5 12:47:28 2023 -0400

    Updated tsd config to include ContextOptions in the widgets typescript definitions

commit 5ee51861f58ee5d07c05d65dc49dff8e965b9704
Merge: 62d1091f6a c2b7a86a7b
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Apr 5 09:55:22 2023 -0400

    Merge pull request #11211 from CesiumGS/optimize-tile-update

    Use Matrix4.multiplyTransformation to update tile transforms

commit 390e0b91f37d2d17ba8d9597a869e79f85baa46a
Author: Guillaume Lathoud <glat@glat.info>
Date:   Wed Apr 5 07:12:30 2023 +0300

    Update AtmosphereCommon.glsl: syntax adjustments

commit c2b7a86a7ba0e6f6d878633ef71150f8ef999230
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 16 19:36:54 2023 -0400

    Use Matrix4.multiplyTransformation to update tile transforms

commit 6201846987e80681779f7f7238849ab221ce7c1b
Author: Guillaume Lathoud <glat@glat.info>
Date:   Tue Apr 4 18:43:06 2023 +0300

    Update CHANGES.md for atmosphere rendering performance fix

commit 62d1091f6a6f9a86c1cccb244bb0b1059737f36d
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Apr 4 09:14:18 2023 -0400

    Update release schedule

commit 372175a458ca61fc7c907e82a7637e55d4b19596
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Apr 3 16:22:06 2023 -0400

    Updates for 1.104 release

commit 386f29fcc053430120636c6ccd9870578d34dd0d
Merge: f29ab6f0fc e5fc2cbe85
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Mon Apr 3 15:18:08 2023 -0500

    Merge pull request #11208 from CesiumGS/sandcastle-deprecations

    Replace calls to deprecated methods in Sandcastles

commit e5fc2cbe85ca24fd8c877e1bfdba346eea4f9b74
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Apr 3 16:05:31 2023 -0400

    Ensure flyTo is not using deprecated API

commit f0ed0c60c9f4ce7c6ff791d373a7a63e446f2499
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Apr 3 15:54:32 2023 -0400

    Replace calls to deprecated methods in Sandcastles

commit f29ab6f0fca9433c68512652ec83845ff1e13c06
Merge: df6921ea1d 1e59b4c461
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Mon Apr 3 13:52:32 2023 -0500

    Merge pull request #11207 from CesiumGS/depthtestagainstterrain-default

    Set depthTestAgainstTerrain when using the viewer with baseLayerPicker enabled

commit 1e59b4c4614d3d211d05541a22d3924521ef3714
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Apr 3 14:28:55 2023 -0400

    Set depthTestAgainstTerrain when using the viewer with baseLayerPicker enabled

commit df6921ea1d07143ca07d647a8b503129e4ab00e8
Merge: b80a4bfc1a 084194467b
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Fri Mar 31 15:10:42 2023 -0500

    Merge pull request #11201 from CesiumGS/fix-context-specs

    Don't create contexts in the global scope in specs

commit 084194467bad739af6a65e40f32ed290dae9f0e6
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 31 13:12:29 2023 -0400

    Don't create contexts in global scope in specs

commit b80a4bfc1a639434da378ed5ad65f7bb7474fe96
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 30 11:01:32 2023 -0400

    Fix doc

commit 985c29c3d8be57c14fac348b6546880e7b12d125
Merge: 2f4074152b 1a6e14544d
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Thu Mar 30 09:45:29 2023 -0500

    Merge pull request #11200 from CesiumGS/headers

    Cesium ion Headers

commit 1a6e14544da408bef9f8711be2283218b613548f
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 30 09:28:24 2023 -0400

    Update CHANGES.md

commit 74379abaeeb36a7fc9346583b924c2a6acdf2e60
Merge: bbff4e6b57 2f4074152b
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 30 09:27:19 2023 -0400

    Merge branch 'main' into headers

commit bbff4e6b57b02ba7ef94badc3a6754699966b0ed
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 30 09:20:41 2023 -0400

    Set cesium client version headers for ion requests

commit dfc4eb87037c7ef594aa865ab0d5c3e25ec87276
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 16:32:07 2023 -0400

    Send X-Cesium-Client header in ion requests

commit 2f4074152b8f52a1cef6b31c45420656d918a6d0
Merge: 07b1082b93 72a4215236
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Mar 29 14:42:28 2023 -0500

    Merge pull request #11059 from CesiumGS/no-ready-promises

    Deprecate ready promises

commit 72a421523634785cadb0f26d677361f040423bb3
Merge: 6019435270 07b1082b93
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Mar 29 14:30:32 2023 -0500

    Merge branch 'main' into no-ready-promises

commit 07b1082b93a871c9e14e8235e5c7429de3c5b4e3
Merge: 45b0ad146e ef5a6e051f
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 15:23:01 2023 -0400

    Merge pull request #11160 from jiangheng90/fix-debug-camera-primitive-render-error

    Fix DebugCameraPrimitive render error

commit ef5a6e051fef14e72d76ca8bcdf8fd75bf75acdd
Merge: def23b0932 45b0ad146e
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 15:22:31 2023 -0400

    Merge branch 'main' into fix-debug-camera-primitive-render-error

commit 45b0ad146e0f08427a7f3f9a2044cd480f066b02
Merge: a0b882d046 66d76da116
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 14:43:57 2023 -0400

    Merge pull request #11167 from CesiumGS/skip-traversal

    Refactor Cesium3DTileset traversal types into separate classes

commit a0b882d046ddd9867e671ded41dec9aa81bc593e
Merge: 866356540f f593afa79b
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 14:08:54 2023 -0400

    Merge pull request #11193 from CesiumGS/fix-ion-url

    Update ion URL in RequestScheduler

commit 601943527080dc943335c78f2816bc0ed15cb8a1
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 14:00:50 2023 -0400

    Remove readyPromise from i3s spec

commit 866356540f415c6b9cf2e5cd52253f170290f418
Merge: 14bfce8648 f4bc9c40df
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Mar 29 12:59:12 2023 -0500

    Merge pull request #11194 from CesiumGS/dependency-updates

    Update outdated dev dependencies

commit 36b4c39bd2b05f1c5650f16fccb26f03441f1b75
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 12:39:12 2023 -0400

    Fix documentation type

commit f593afa79b03994833e8f4ea4c46bd6b068a546c
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Mar 29 12:37:23 2023 -0400

    Update CHANGES.md

commit 14bfce8648a412cd4272a379443c3bcb49423c38
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 12:27:04 2023 -0400

    Tweaked travis scripts to ensure encrypted variables are available for internal tasks

commit d4275943c51ba409b072d5c11a1a62aa41850ea1
Merge: b1a77bf2ff a121a0a145
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Mar 29 10:47:07 2023 -0500

    Merge pull request #11192 from CesiumGS/fix-built-viewer

    Fix built viewer after esbuild update

commit f4bc9c40df37e6ad5679212e09c2b933ec32693b
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 10:46:25 2023 -0400

    Update dev dependencies

commit 12a2f2899e15969895a59ff9ae34eed46d2ec255
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Mar 29 11:15:05 2023 -0400

    Update ion URL in RequestScheduler

commit 34ef5bc7cda207b6914dde0000700c659ea8be06
Merge: 0cabc3be7a 939a14e7cc
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 11:11:41 2023 -0400

    Merge branch 'no-ready-promises' of github.com:AnalyticalGraphicsInc/cesium into no-ready-promises

commit 0cabc3be7af9d3e97d593998ce0cf8b916a30454
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 11:10:16 2023 -0400

    Update CHANGES.md

commit a121a0a1459d35ea4b6313873cd8a7bd5b4e4b10
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 29 10:21:19 2023 -0400

    Fix built viewer

commit 7a35fa9624d405540a295a3affb1e43611e0f73c
Author: Guillaume Lathoud <glat@glat.info>
Date:   Wed Mar 29 07:41:41 2023 +0300

    Add WebGL1 support to AtmosphereCommon.glsl

commit a5cc2b055d8d0628742c39f11064d508d0f4fb03
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Mar 28 19:27:13 2023 -0400

    Standardize whitespace, clarify comments in AtmosphereCommon.glsl

commit 939a14e7cc61ab6e9ff321329c915a21293069e6
Merge: 2dd4240e58 72fddd6855
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Tue Mar 28 15:55:47 2023 -0500

    Merge pull request #11173 from CesiumGS/model-ready

    Deprecate Model and Cesium3DTileset readyPromise

commit 72fddd6855e4066136ca033297fceae2db7734af
Merge: d3af1ba2bd ba022f70d5
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Tue Mar 28 15:54:35 2023 -0500

    Merge branch 'no-ready-promises' into model-ready

commit b1a77bf2ff82aa816eb0d9d83f8ab9459008a7ba
Merge: 1313b31914 dbe0d457ef
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 28 16:52:12 2023 -0400

    Merge pull request #11183 from CesiumGS/custom-shader-docs

    Fix example in CustomShaderGuide

commit 2dd4240e5840cf1438c4a40a93bd9db1dcb793e4
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 28 16:32:51 2023 -0400

    fix sandcastle warning

commit d3af1ba2bd2aca4bbb626411550d97eb690dc6f4
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Mar 28 16:27:52 2023 -0400

    Fix typo in comment

commit ba022f70d5dae3f01da24d33a0b9f3fc4099b3cb
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 28 16:19:44 2023 -0400

    Add CesiumTerrainProvider.fromIonAssetId

commit 18025ca3aaa6552d620c23b0496ff44cdfc4b9b2
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 28 15:00:48 2023 -0400

    Cleanup

commit 76defbae4bf832bd13a70b21f5412ea2e0d2e6db
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 28 14:39:20 2023 -0400

    Deprecation & documentation cleanup

commit dee5f0d18a6237e3d18067b69a1af9ee357dfee1
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 28 13:40:22 2023 -0400

    Cleanup

commit 66d76da116354710120a16556bd1efb263d843f9
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Mar 28 13:18:52 2023 -0400

    Fix Check.typeOf signature in tileset.hasMixedContent

commit 9f59a400ebfc2f93bb9d6669899f93d356672bee
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Mar 28 12:59:28 2023 -0400

    Fix specs to use tileset.hasMixedContent accessor

commit 841b9612846d476a9c3001b2b94326a2f8f9fced
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Mar 27 17:49:09 2023 -0400

    Expose and document private property Cesium3DTileset.prototype.hasMixedContent

commit 83afbc4e2ef8782d319988649a173165f93f53d6
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Mar 27 17:15:35 2023 -0400

    Add getter for tileset.isSkippingLevelOfDetail

commit 1a5ad41a6f046ab6e358fc29fb69a0cf61473928
Merge: fbfcc66caf 85dc4ca088
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 15:45:43 2023 -0400

    Merge branch 'no-ready-promises' into model-ready

commit 85dc4ca0882b82940b75f83b3c99065d528d0f9f
Merge: 0b177166a1 1313b31914
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 15:43:41 2023 -0400

    Merge branch 'main' into no-ready-promises

commit fbfcc66caff29cebf640cc1cd0c5df4231c2ee32
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 15:33:53 2023 -0400

    Fix docs

commit b14765558c4c71853321c47951349ff7dce493b9
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 15:28:49 2023 -0400

    Fix vector tile example

commit 63f720d45e2964cfa79a0aaebd5ed5bb0cd03feb
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Mar 27 14:33:22 2023 -0400

    PR feedback phase 1

commit 0b177166a1705d106677fd5956141b47cb38005b
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 14:16:23 2023 -0400

    Fix specs, ensure listeners are removed when objcet is destroyed

commit b5a82a4a16bc5aea4307e6d655e9a13ca7614390
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 13:45:17 2023 -0400

    Update TimeDynamicPointCloud, I3S, and Voxels readyPromise

commit dbe0d457ef88329e5d290595234ba83e7bd1842a
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Mar 27 11:04:18 2023 -0400

    Fix broken links in CustomShaderGuide

commit 1313b31914c608d954dc159a107211f21b09fa12
Merge: b2e029adae c8d6c9032b
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 09:39:52 2023 -0400

    Merge pull request #11180 from javagl/feature-picking-sandcastle-fixes

    Cleanups for 3D Tiles Feature Picking sandcastle

commit b2e029adaee18f40db87ba8a8ed9a4321659a3ab
Merge: 4244bc02de 5f62acfb31
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 27 09:26:31 2023 -0400

    Merge pull request #11186 from javagl/documentation-link-fixes-2023-03-26

    Documentation link fixes 2023 03 26

commit 5f62acfb31055fe3091c93833b7131445279555e
Author: Marco Hutter <javagl@javagl.de>
Date:   Sun Mar 26 17:04:08 2023 +0200

    Fix lik to documentation guide

commit bc3bafd6d9609a510bf889d5feb2aa1e8f964e72
Author: Marco Hutter <javagl@javagl.de>
Date:   Sun Mar 26 16:55:48 2023 +0200

    Update link to Deprecation Guide

commit bebcc0fcaf107f0cb82d45b1c9f43584b71dd0f8
Author: Marco Hutter <javagl@javagl.de>
Date:   Sun Mar 26 16:55:29 2023 +0200

    Remove link to WebStorm guide

commit 4a74622a0972f2694e3134715473e88d7b7a4cb9
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Fri Mar 24 12:26:23 2023 -0400

    Fix example in CustomShaderGuide

commit 58e93731f4746af0b7282e5565cfebbee965a325
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 23 14:45:02 2023 -0400

    Add specs

commit c979df1495e33913ac045f9e38fe2e59625de695
Merge: 5f94afc525 bc8ee55c40
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 23 14:35:04 2023 -0400

    Merge branch 'model-ready' of github.com:AnalyticalGraphicsInc/cesium into model-ready

commit 5f94afc5255597b4ef9896b7f9ecbebc821d34d1
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 23 14:34:52 2023 -0400

    Small fixes

commit 2290ec24291d9d977492cf2fedbf24e68d81120d
Author: Guillaume Lathoud <glat@glat.info>
Date:   Thu Mar 23 11:27:40 2023 +0300

    Polished code based on review comments.

    Note: carefully tested the performance implications of each code change.

commit def23b0932663e5bfee09b7bc0e5192092179275
Author: jiangheng <jiangheng@geoway.com.cn>
Date:   Thu Mar 23 09:25:06 2023 +0800

    Make both projectionMatrix called

commit 70ad3a13334a5701f2a4506497d282c571f24d33
Merge: fd2d32dc75 4244bc02de
Author: jiangheng90 <jiangheng@geoway.com.cn>
Date:   Thu Mar 23 08:43:14 2023 +0800

    Merge branch 'main' into fix-debug-camera-primitive-render-error

commit bc8ee55c40a8e969dece438454006c122d965b0d
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Mar 22 17:45:43 2023 -0400

    Fix typos in READMEs

commit 64f2d61be70e8ee1860c2864426175bbdd39bc5c
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 22 16:39:11 2023 -0400

    Fix Sandcastle, docs

commit eb781ae1d0a1a117a400faa92af43924591ef9e2
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 22 15:30:44 2023 -0400

    Fix 3D Tiles clipping planes Sandcastle

commit 4244bc02def1c931808dbeb7bd5c748218c31046
Merge: b61a8cb71a 70c4eb3524
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 22 10:00:30 2023 -0400

    Merge pull request #11179 from mikecabana/viewer-imagery-provider-false

    Updates Viewer docs to allow false for imageryProvider

commit b61a8cb71a15ee848939e7ea975140432f11da16
Merge: 0cf1f80e4a 71bac95822
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Tue Mar 21 16:21:29 2023 -0500

    Merge pull request #11177 from CesiumGS/request-error

    Update docs to correct error type for RequestErrorEvent

commit c8d6c9032b6787cc47fa4f11ac7118459e707351
Author: Marco Hutter <javagl@javagl.de>
Date:   Tue Mar 21 20:21:06 2023 +0100

    Cleanups for 3D Tiles Feature Picking sandcastle

commit 0cf1f80e4a15c6faeb4ce272765a65aaf9d72aba
Merge: a129f19025 860a7c5f84
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 21 13:32:40 2023 -0400

    Merge pull request #11157 from UniquePanda/fix-build-watch

    Make build-watch compatible with new esbuild rebuild API

commit a129f1902584f4726a79764b419210b4b030f6df
Merge: 4a825e3157 6e18738654
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 21 13:25:07 2023 -0400

    Merge pull request #11155 from L-hikari/main

    update MapboxImageryProvider example mapId

commit 70c4eb352417476d31e6dadacd6911e72cec776d
Author: Michael Cabana <mikeyc343@gmail.com>
Date:   Tue Mar 21 11:22:25 2023 -0400

    Updates CONTRIBUTORS.md

commit b037162a300517c447dd4ec0b96411f3c242aa2a
Author: Michael Cabana <mikeyc343@gmail.com>
Date:   Tue Mar 21 11:19:50 2023 -0400

    Updates CHANGES.md

commit 22c4d0f8e5e851ab0e4211b0522a04325202cf62
Author: Michael Cabana <mikeyc343@gmail.com>
Date:   Tue Mar 21 11:15:44 2023 -0400

    Updates Viewer docs to allow false for imageryProvider in ConstructorOptions

commit 6e18738654ca04156e242609fd234b2e9e90bb6e
Merge: a5d584bcf1 4a825e3157
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 21 11:04:46 2023 -0400

    Merge branch 'main' into main

commit 71bac958221033204c4178fd5b60d1623227ba3e
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 21 10:17:38 2023 -0400

    Update CHANGES.md

commit d4c9a5c9824cf095bd6606ddfbfb5b02e1b9b6ad
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 21 10:14:46 2023 -0400

    Update docs to correct error type for requestErrorEvent

commit c7d0cc2d972402f9dd99b51383ea7b3d8ae6ea95
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 21 09:25:12 2023 -0400

    Fix spec

commit e2ae222efeffaf394a5bc7a63b893e28031300cc
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 20 17:00:45 2023 -0400

    Fix specs

commit 4f8c8cd19b95f42d152210ef69c89c467d24616b
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 20 16:02:37 2023 -0400

    Update Sandcastles

commit 0a498caa36c5dcf533daebbd04933bff0b05bb28
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 20 11:57:06 2023 -0400

    Deprecate Cesium3DTileset ready and readyPromise

commit 4a825e3157033d08ccb71faa9c44f83495fb8f54
Merge: 2dcb6aa092 38d19219da
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 20 08:57:44 2023 -0400

    Merge pull request #11158 from CesiumGS/obb-cube-description

    Fix description of OrientedBoundingBox cube.

commit 2dcb6aa092e36e10f40992bd4c606531999f8360
Merge: 84c9db6391 eab73140bf
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Mar 20 08:56:10 2023 -0400

    Merge pull request #11150 from JacobVanDine/docs-issue-10303

    Doc Issue #10303 Fix in screenSpaceCameraController

commit eab73140bfc706f3ba7a6ab984b1e99bdb0245f8
Author: JakeVanDine <jv477@drexel.edu>
Date:   Sun Mar 19 20:28:11 2023 -0400

    Updated Documenation to reflect Gabby's suggestion

commit 0d5ff05df9ea32ba10c521f42259aabad54e2531
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 17 15:06:39 2023 -0400

    Update examples and CHANGES.md

commit d02e73908adf38f55365ec23fa673a7ceecf0e41
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 17 14:20:46 2023 -0400

    Refactor loading promises

commit 556ff8823738dfc035ca518fc2e30a9cd65afc9b
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 16 18:12:02 2023 -0400

    Add specs to check Cesium3DTilesetTraversal interfaces

commit 141032fd204ae5d06fe5deb21d348057da0b85d4
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 16 14:25:40 2023 -0400

    Split base and skip traversal into separate classes

commit daaafff2a2ff01587ba0df6cb3522aabe493c0ad
Merge: 06bd027edc 84c9db6391
Author: Guillaume Lathoud <glat@glat.info>
Date:   Wed Mar 15 12:48:26 2023 +0300

    Merge branch 'main' into glathoud-patch-1-atmosphere-performance

commit 06bd027edc4e4bd4f59583853846ffe5c8800429
Author: Guillaume Lathoud <glat@glat.info>
Date:   Wed Mar 15 11:47:12 2023 +0200

    Improved ground atmosphere as seen from outer space

    Flying low, i.e. close to the relief, should still be performant.

commit fd2d32dc758f571213e1044044c5a0bb2d4d6e72
Author: jiangheng <jiangheng@geoway.com.cn>
Date:   Wed Mar 15 15:52:30 2023 +0800

    Fix DebugCameraPrimitive render error

commit 38d19219da152c7fd7a42c8090ef370a9c497756
Author: Kevin Ring <kevin@kotachrome.com>
Date:   Wed Mar 15 17:11:05 2023 +1100

    Improve doc of halfAxes property, too.

commit 17a84ebf718a087495f2bfc4478b808b57b24d0b
Author: Kevin Ring <kevin@kotachrome.com>
Date:   Wed Mar 15 17:08:11 2023 +1100

    Fix description of OrientedBoundingBox cube.

    And add a test that demonstrates that the new description is the correct
    one.

commit 860a7c5f8443fb1449bbd1f6f88953139cd02fd0
Author: Marcel Wendler <marcel.wendler@pointcloudtechnology.com>
Date:   Tue Mar 14 10:31:24 2023 +0100

    Make build-watch compatible with new esbuild rebuild API

commit a5d584bcf148fbf9cadecbd2f1bf2928d1a53be5
Author: L <wangtianliangyaya@gmail.com>
Date:   Tue Mar 14 11:51:03 2023 +0800

    update MapboxImageryProvider example mapId

commit 5a390e4e7e7fd500ab520f39f4e38763a1711976
Author: JakeVanDine <jv477@drexel.edu>
Date:   Fri Mar 10 20:43:27 2023 -0500

    Changed ScreenSpaceCameraController.enableCollisionDetection documentation.

commit 4fb18c956ccf7d5d223953ab00068d325f1e5620
Author: JakeVanDine <jv477@drexel.edu>
Date:   Fri Mar 10 19:59:21 2023 -0500

    docs-issue-10303: -initial commit
    -added name to CONTRIBUTORS.md
    -added more description for enableCollisionDetection in HTML file

commit a9942be24a2dac5b1cce2a174a143cd26b068468
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Fri Mar 10 13:10:04 2023 -0500

    Continue separating traversal logic

commit b5962b097a8dd94febc6bccf1444e36fdf4755f3
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 9 20:37:35 2023 -0500

    Pull TraversalUtility functions out of Cesium3DTilesetTraversal

commit 73bf2f32113bbe92b87401e9d460b70e6927edea
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 9 18:57:50 2023 -0500

    Use private skipLevelOfDetail flag more consistently

commit 84c9db6391f6757ab7a4dcb08a676c3833a639b0
Merge: 7f8ad84a53 fb3ef49340
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 9 16:39:03 2023 -0500

    Merge pull request #11129 from rudifa/enable-shadow-root-2

    CreditDisplay.js: appendCss() : add styles to shadowRoot if found

commit fb3ef493407c85b016fa14f54ef63d83e1093464
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 9 16:22:54 2023 -0500

    Tweak CHANGES.md

commit 86b19bb9999b54a908aa623ccd84e707f0ce5253
Merge: d59781a5df 7f8ad84a53
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 9 16:14:46 2023 -0500

    Merge branch 'main' into enable-shadow-root-2

commit 7f8ad84a53c3e497db03bccac2e14a74be544c41
Merge: 52f14d0399 fc3018974b
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 9 16:13:47 2023 -0500

    Merge pull request #11148 from nnoce14/polygon-graphics-type-fix

    PolygonGraphics hierarchy type fix

commit 8f8a869ef2a126cd33383c3dcf46684ccb47bfc6
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 9 14:24:13 2023 -0500

    Move basic tile checks from traversals to Cesium3DTile

commit fc3018974ba45857a3920c6b057f5bd092190321
Author: nnoce14 <nnoce12@gmail.com>
Date:   Thu Mar 9 10:28:31 2023 -0500

    update CONTRIBUTORS.md

commit 0baf0e8f97c142353c392963c39dded2a06951a0
Author: nnoce14 <nnoce12@gmail.com>
Date:   Thu Mar 9 10:24:48 2023 -0500

    Added Cartesian3 type to PolygonGraphics hierarchy property

commit 1eaec3fd44534d19824bb05e631cd91da19e452e
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Mar 9 09:21:50 2023 -0500

    Fix deprecation warning

commit f5bc8e1d6b723f9dd53d3c6624382e62df47f5e4
Merge: f309771860 06fecc274c
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 8 16:03:56 2023 -0500

    Merge branch 'no-ready-promises' into model-ready

commit f3097718606c392d76754922bad1bab76ca54681
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 8 15:58:23 2023 -0500

    Model readyPromise deprecation and minor loader refactor

commit 46a40bddc49caca9e0e4d3510a7ed83dcff1c93a
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Mar 8 14:00:38 2023 -0500

    Minor edits for clarity and consistency with Coding Guide

commit 06fecc274ce2a8695b2aa67b8656f48b3759c6ca
Merge: 065c9a61b3 ae0792bf12
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Mar 8 08:35:09 2023 -0600

    Merge pull request #11075 from CesiumGS/imagery-ready-promise

    Deprecate ImageryProvider ready promises

commit d59781a5df402e6a1aefd2cbfab7023e114c1da6
Merge: 42cbc6645f 52f14d0399
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Wed Mar 8 15:28:17 2023 +0100

    Merge branch 'refs/heads/main' into enable-shadow-root-2

commit 42cbc6645f1f2bd854f17643746000281fd84e9a
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Wed Mar 8 15:23:04 2023 +0100

    CreditDisplaySpec.js: move out of runTests() 3 tests that need no container

commit ae0792bf12a10c445f262cce6976426074be6df3
Merge: e99258595f 065c9a61b3
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 7 17:33:26 2023 -0500

    Merge branch 'no-ready-promises' into imagery-ready-promise

commit 065c9a61b32b8766d6b4d1430bfd271a6735e529
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 7 17:09:38 2023 -0500

    Updated deprecation warnings

commit 4f8bc55cf0414cfc7487c12b7b7df01a9d39ec0c
Merge: 5bde3b3992 52f14d0399
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 7 17:04:01 2023 -0500

    Merge branch 'main' into no-ready-promises

commit 52f14d039956848ce7e314beb4549a26b34db8ab
Merge: 50e612b44e 76d4a34d25
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Mar 7 09:44:20 2023 -0500

    Merge pull request #11137 from CesiumGS/performance-guide

    Add network throttling recommendations to Performance Testing Guide

commit e99258595f8131ef36c00368405054203a6d1586
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Mar 6 19:25:06 2023 -0500

    Fix typo in GlobeSurfaceTileProvider.js

commit 835e222234e7789af7d959d39918e80907242b7a
Merge: e7ef4577b7 50e612b44e
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Sun Mar 5 23:19:18 2023 +0100

    merged main into branch

commit e7ef4577b7ac9be231bd74f36bf5ed4a752cac68
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Sun Mar 5 22:56:34 2023 +0100

    CreditDisplaySpec.js: modify to test CreditDisplay also under shadowRoot

commit 76d4a34d251d6d22d3dee8be7418159504e8bcfe
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Fri Mar 3 18:20:33 2023 -0500

    Add network throttling recommendations to Performance Testing Guide

commit 50e612b44ed33bf5f15bd67d3e2d71ed23c03e48
Merge: e919963b50 a616a6c727
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Fri Mar 3 14:57:03 2023 -0600

    Merge pull request #11136 from CesiumGS/prettier-no-config

    Use the no-config option with prettier to prevent conflicts

commit a616a6c7276a1c7655fcc677c5b9a116a9d150cc
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 3 10:32:22 2023 -0500

    Use the no-config option with prettier to prevent conflicts

commit e919963b50bef849108e8254a11417bd174ccd6b
Merge: 0b8bf8d658 572e5ef4dd
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 3 10:21:37 2023 -0500

    Merge pull request #11116 from CesiumGS/tileset-traversal

    Document tileset traversal functions

commit 0b8bf8d658113dada8f9f1a097c2650c8439d10a
Merge: 249c94213e 3329e411ad
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 3 10:03:40 2023 -0500

    Merge branch 'main' of github.com:AnalyticalGraphicsInc/cesium into main

commit 249c94213ea6ab3b2e23a1a7446a33ea15f8c89d
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 3 10:03:20 2023 -0500

    server build results can be undefined if not yet built

commit 3329e411ad469ae066a4b8a702c4692889777e8f
Merge: 97e6ec7f11 6391dadb7e
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Mar 3 09:09:24 2023 -0500

    Merge pull request #11125 from i-tengfei/main

    Entity.merge does not overwrite _children.

commit 06d39ada0a2b7afa5b4fb401029d95bf0e401786
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Fri Mar 3 12:58:44 2023 +0100

    npm run prettier: it folded 1 long line and inserted a space next to each brace

commit 6391dadb7ea2fc5cb66f32ed7751e77282e80f04
Author: Tengfei <tengfei@tengfei.fun>
Date:   Fri Mar 3 13:44:21 2023 +0800

    update CHANGES.md

commit 16eb8eb8b88f2fbd3f3eb17f3f94e1fb2d65c988
Author: Tengfei <tengfei@tengfei.fun>
Date:   Wed Mar 1 20:36:38 2023 +0800

    update CHANGES and CONTRIBUTORS

commit 3337b2f2ccc0a99185d3ffbe69ffaf328564c5ea
Author: Tengfei <tengfei@tengfei.fun>
Date:   Wed Mar 1 00:26:23 2023 +0800

    Entity.merge does not overwrite _children.

commit 63b52bf5114e43d5af57c254c4aa5e5c5063f6ed
Author: Guillaume Lathoud <glat@glat.info>
Date:   Fri Mar 3 08:06:53 2023 +0300

    Fixed duplicate `rayStepLength` init

commit 572e5ef4dd75d9af07990e5337051593c434c520
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 2 17:59:37 2023 -0500

    Minor clarifications in Cesium3DTilesetTraversal

commit 089527452e942f4d4667a0f76ec307bc46c8da12
Merge: f65aa1ce03 97e6ec7f11
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Thu Mar 2 21:52:03 2023 +0100

    Merge branch 'main' into enable-shadow-root-2

commit f65aa1ce0358c13dbb0095455175bdeeabd08fa7
Author: Rudolf Farkas <rudi.farkas@gmail.com>
Date:   Thu Mar 2 21:37:53 2023 +0100

    Update packages/engine/Source/Scene/CreditDisplay.js

    Co-authored-by: Gabby Getz <gabby@cesium.com>

commit d07eedc8d60247a94c4aee794f0154c9fa25408e
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 2 15:12:10 2023 -0500

    Fix contentExpired behavior broken in #db95418

commit b2b529183cfaa99d4d81122da3af23c025c5273c
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Mar 2 14:41:37 2023 -0500

    Fix docs for Cesium3DTile constructor

commit 5c1f128e04071a882afc1a69f6d652996a540f3c
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Mar 1 18:29:42 2023 -0500

    Reduce indirection in Cesium3DTilesetTraversal

commit 97e6ec7f11e2647a4bfd9adaffc52b747ad37eaa
Merge: f06252a4e6 37ad09dc1f
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Mar 1 16:38:45 2023 -0600

    Merge pull request #11131 from CesiumGS/release-deployment

    Fix release publish step

commit 37ad09dc1fa49784d3a1e2970d87aa8dc56980ad
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 1 17:15:01 2023 -0500

    Fix release publish step

commit e2d391a0fb76ffb80dead945260a74bde4c10ac1
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Mar 1 15:39:08 2023 -0500

    Simplify function signatures in Cesium3DTilesetTraversal

commit 94cf13bd0616f075b310943cf7287158488b5f40
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Wed Mar 1 21:17:10 2023 +0100

    CHANGES.md: add Fixed ... [#10907]

commit 185ec8c7089849852a4ac463bb656ea81f05d1a7
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Mar 1 11:31:08 2023 -0500

    Add docs and clean up in Cesium3DTilesTraversal

commit f06252a4e69b4455e769b06fcb685a87c7d016ba
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 1 09:42:23 2023 -0500

    Fix ParticleSystemSpec

commit eb71297f11c2a63a194731c2b68bd53d5971802f
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Mar 1 09:23:20 2023 -0500

    Updates for 1.103 release

commit eeae9a3cedc61b3b5c3ebb47217527b2476e66e7
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Wed Mar 1 15:08:45 2023 +0100

    add my name to CONTRIBUTORS.md

commit 887701f96735ed4eca5def359ebd38fd5b1eb9fc
Merge: 789cc9e71c 456f01c905
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 28 12:05:36 2023 -0500

    Merge pull request #11108 from jiangheng90/improvement-of-smooth-zoom

    fix camera go througth building in zoom

commit c6931d1c1cad46d0507f87dc57d9f0abe030ef95
Author: Rudi Farkas <rudi.farkas@gmail.com>
Date:   Tue Feb 28 12:46:34 2023 +0100

    CreditDisplay.js: appendCss() modify to add styles to shadowRoot if found

commit 456f01c9057de46c7f036f1bd6300f104342f176
Author: jiangheng <jiangheng@geoway.com.cn>
Date:   Tue Feb 28 09:53:06 2023 +0800

    add minimumPickingTerrainDistanceWithInertia

commit db95418c9b38870ecc501e3a13e2313cab6ab060
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 27 16:37:03 2023 -0500

    Document and clean up helper functions in Cesium3DTileset

commit f9b7f3298836f2f63b27dbcc70e0668dd1b3b6db
Merge: 9668df58ed 789cc9e71c
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 27 15:34:56 2023 -0500

    Merge branch 'main' into tileset-traversal

commit 9668df58ed4a565062a97feb41cd3ed7d3a39f0c
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 27 14:16:10 2023 -0500

    Add missing types in Cesium3DTile

commit 789cc9e71c845200fe0ecdbe19ac45e897545b96
Merge: 578af7115a 3a9ac1c022
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 27 13:25:13 2023 -0500

    Merge pull request #11120 from CesiumGS/voxel-before-opaque

    Render voxels before opaque entities

commit 578af7115a63b216464eafb8e1ed1131087ed4e6
Merge: 98e61b4212 ffe050ccd9
Author: Sean Lilley <lilleyse@gmail.com>
Date:   Mon Feb 27 13:09:46 2023 -0500

    Merge pull request #11122 from CesiumGS/voxel-resolution

    Incorporate updates for voxel lighting

commit 98e61b4212d6a76994ef5f9719ceb7949e3d7721
Merge: bc3471d5f5 7fca05034d
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Mon Feb 27 11:51:38 2023 -0600

    Merge pull request #11119 from CesiumGS/s3-list-fix

    Fix deploy by accounting for possibly undefined property after AWS SDK update

commit 3a9ac1c02296c485e1c4b1207c31977dfdddc5ad
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 27 12:38:46 2023 -0500

    Render voxels before opaque entities

commit ffe050ccd9654ce8b3ce482b1409204894f6d4d6
Merge: 2b5b8f1899 8be73fa80c
Author: Sean Lilley <lilleyse@gmail.com>
Date:   Mon Feb 27 12:11:24 2023 -0500

    Merge pull request #11076 from CesiumGS/voxel-lighting

    Voxel lighting for voxels with BOX shape

commit bc3471d5f5266552c8da95256908a95e146bf08b
Merge: 43e95ed881 2b5b8f1899
Author: Sean Lilley <lilleyse@gmail.com>
Date:   Mon Feb 27 12:10:52 2023 -0500

    Merge pull request #11050 from CesiumGS/voxel-resolution

    Optimum step size for box-shaped voxels

commit 7fca05034d3360b17ba5f0c0d05df5d976777b38
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 27 11:57:28 2023 -0500

    Fix deploy by accounting for possibly undefined items after sdk update

commit 2b5b8f18993ee1e787c1e2a13f81f1ea3e4aaaa4
Merge: d1dd625c6c f3938f9362
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 27 11:57:08 2023 -0500

    Merge branch 'main' into voxel-resolution

commit 43e95ed8813e4232e1b4abe14ca128e22cb6aba2
Merge: f3938f9362 03bd704b61
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 27 11:53:51 2023 -0500

    Merge pull request #11118 from CesiumGS/shadow-map-qualifier

    Fix type qualifier in ShadowMapShader

commit 03bd704b61ecc147cab7f7b3b96d43ddd9ceae4b
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 27 11:41:36 2023 -0500

    Fix type qualifier in ShadowMapShader

commit f3938f9362a7d72323b09eb9763c13983d068c9e
Merge: f64d78e27b 3f8acbd33a
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 27 08:53:45 2023 -0500

    Merge pull request #11094 from onsummer/deps-upgrade

    Upgrade `rollup-plugin-terser` dependency

commit 3f8acbd33aed09f218df07a0b1fedf234ca49f01
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Feb 24 17:06:24 2023 -0500

    Update peer dependencies

commit 7748850826d2b9631da8f0d98fe5160f6d988463
Merge: 68056794a4 f64d78e27b
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Feb 24 17:04:49 2023 -0500

    Merge branch 'main' into deps-upgrade

commit b182960ac6f80313df42d90994b23c4b242fad8b
Author: jiangheng <jiangheng@geoway.com.cn>
Date:   Fri Feb 24 10:24:13 2023 +0800

    adjust max approaching collision distance

commit f64d78e27be27a7174230071c10b22777596f7f9
Merge: 9699618ef1 5e4e316226
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Thu Feb 23 12:08:21 2023 -0600

    Merge pull request #11100 from CesiumGS/esbuild-update

    Update esbuild

commit 9699618ef1c00cf393c9d43331d376c7a35ba050
Merge: ead80c7783 41857d1e87
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Feb 23 08:53:49 2023 -0500

    Merge pull request #11099 from bbbbx/main

    Fixed textures visibility for particle systems

commit 41857d1e870bd2c847cb3c8de0aaff50f85a5711
Author: bbbbx <venus@venusworld.cn>
Date:   Thu Feb 23 21:14:03 2023 +0800

    Fixed textures visibility for particle systems

commit 99aa76c0eecb1c7c82fd33ff28be05d8917c3597
Author: Guillaume Lathoud <glat@glat.info>
Date:   Thu Feb 23 10:24:19 2023 +0300

    Update CONTRIBUTORS.md

commit a548448a308396a522d3e09b99d2cdd6aeb23cb6
Author: Guillaume Lathoud <glat@glat.info>
Date:   Thu Feb 23 10:18:31 2023 +0300

    Performance improvement

    Context: https://github.com/CesiumGS/cesium/issues/10510#issuecomment-1438267847

commit eb4b9ef46f77121bff93b8a30c8dcfdc7df7463d
Author: jiangheng <jiangheng@geoway.com.cn>
Date:   Thu Feb 23 12:16:30 2023 +0800

    fix camera go througth building

commit ead80c7783a24997b6868b692b512c021b5949a1
Merge: d3b4bb3015 c4cb602b3c
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Feb 22 17:43:32 2023 -0600

    Merge pull request #11102 from CesiumGS/eslint-updates

    Update to the latest version of cesium eslint config

commit d3b4bb30154f002ea527bb83db994acc1286af04
Merge: 358e31d3d8 5e1b562192
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Feb 22 17:32:49 2023 -0600

    Merge pull request #11104 from CesiumGS/update-aws-sdk

    Update aws-sdk from v2 to v3

commit 358e31d3d864e97ce618f03560549c683044800c
Merge: ef50203c24 446eadbb19
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Feb 22 16:29:20 2023 -0600

    Merge pull request #11106 from CesiumGS/will-read-frequently

    Add willReadFrequently option to 2d contexts where applicable

commit 446eadbb197f5d6c28c37b22cc33e98d3fce6b86
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 22 15:53:49 2023 -0500

    Add willReadFrequently option to 2d contexts where applicable

commit 5e1b56219279449a8d93461bc4870fd155a32d50
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 22 14:43:14 2023 -0500

    Update aws cli used in CI

commit 8be73fa80c3784e4eb6ca7dc42b6444666380903
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 22 14:19:21 2023 -0500

    Use primitive and provider transforms in voxel draw command

commit f4428347a44d391ddeed54d47a62fb0adb8f4648
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 22 11:42:00 2023 -0500

    Update aws-sdk from v2 to v3

commit c4cb602b3c123863c79e410488fb7ae44ce1cb0d
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 22 12:00:03 2023 -0500

    Update to the latest version of cesium eslint config

commit 5e4e316226f355519d9feba96717ac03eb072f03
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 22 10:11:07 2023 -0500

    Update esbuild

commit ef50203c24af8a559fae78107fb8985dde0e1e84
Merge: 9295450e64 bc1de11e9e
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 21 12:58:39 2023 -0500

    Merge pull request #11062 from jiangheng90/smooth-zoom-with-mouse-wheel

    implement inertiaZoom in aggregator

commit 68056794a463f1d04e7b461cd1c1853c38f64339
Author: onsummer <onsummer@foxmail.com>
Date:   Tue Feb 21 15:21:20 2023 +0800

    Upgrade rollup plugin dependency

commit bc1de11e9edafe98cdaf50a9346c22f6b50dbbfa
Author: jiangheng <jiangheng@geoway.com.cn>
Date:   Tue Feb 21 11:10:02 2023 +0800

    fix pickGlobe condition

commit 3f262e2f6f1d8735ec79904d639516d6756ecb40
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Tue Feb 21 09:40:32 2023 +0800

    fix inertia jumpy when inertia approaching ground

commit 9bcfa35eac055bd5ed85df1343baca79d784e5df
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 20 20:16:30 2023 -0500

    Use multiplicative shift for voxel ray steps

commit 1e59130dcb0901c25fd2e07a16010bc0652f5dfe
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 20 10:03:44 2023 -0500

    Update tests

commit a0bb54aff45ba0535d27b96940515ad6486b2ce2
Merge: e07c8629c1 9295450e64
Author: jiangheng90 <jiangheng90@live.com>
Date:   Mon Feb 20 12:11:58 2023 +0800

    Merge branch 'main' into smooth-zoom-with-mouse-wheel

commit 9295450e64c3077d96ad579012068ea05f97842c
Merge: 3b93043d79 08f3886903
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Sat Feb 18 17:11:43 2023 -0600

    Merge pull request #11080 from onsummer/ts-type-enhance

    Use primitive type instead of constructor type

commit 08f3886903c8ebb31e97da5ae3911ddbba0aee65
Author: onsummer <onsummer@foxmail.com>
Date:   Sat Feb 18 16:59:31 2023 +0800

    Fix some type typo and remove unrelate code

commit 8429a2212aa2c4a7d98ee2d948621f68a0bc2744
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Feb 17 17:21:35 2023 -0500

    ImageryLayer.fromProviderAsync, baseLayer

commit c22a9b6265f22d8f17390ccee4faef98104a78f6
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Fri Feb 17 15:40:46 2023 -0500

    Remove outdated files to fix merge conflict

commit 3b93043d795bbf7ea89bafae3420e01952ba4032
Merge: 75c0fe66a2 9fa800a5ac
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Feb 17 09:12:04 2023 -0500

    Merge pull request #11089 from CesiumGS/re-remove-raf

    re-remove deprecated polyfills

commit 59c60ba14546b9502fd1da74be8f4a9b6ccbcc24
Author: onsummer <onsummer@foxmail.com>
Date:   Fri Feb 17 11:10:04 2023 +0800

    Add missing type

commit 723ee9f6e7ed8f870c8bb5130bf343b3c429968d
Author: onsummer <onsummer@foxmail.com>
Date:   Fri Feb 17 10:22:50 2023 +0800

    Add missing type and bracket

commit 9fa800a5ac51342c23c9775540a4a4d73b3aae6a
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 16 18:47:53 2023 -0500

    re-remove deprecated polyfills

commit 2f8fba2ff3fa3af68c323bc8028244bc2b5c47a5
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 16 17:14:31 2023 -0500

    Document remaining helper functions in Cesium3DTile

commit e2c4066a9d3721e8416bd3735e9688059b81c7ce
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 15:12:04 2023 +0800

    Remove changes doc for ts import types

commit 98375d4e80d1441374163c2226d9ded81f5a1e78
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 14:54:33 2023 +0800

    Fix types in unlint list

commit 52e67f9742f45b749520cb231ad8777ca9b75a02
Merge: eb3d4c3125 75c0fe66a2
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 14:49:17 2023 +0800

    Fix conflict

commit eb3d4c31253c746b23b0c6d18e65570922d36cc2
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 14:46:53 2023 +0800

    Rollback dependency

commit 8f150168acb31d7182cc479fd230a51036b7b818
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 15 18:34:36 2023 -0500

    Document and clean up Cesium3DTile (WIP)

commit 75c0fe66a20b6c9fb8651ebe39547d20e72ac1df
Merge: 4855df37ee 9a302f97b0
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 15 14:28:18 2023 -0500

    Merge pull request #11087 from CesiumGS/voxel-traversal-specs

    Improve voxel test coverage

commit 9a302f97b015bc33a47deaab62459781379c062f
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 15 13:48:02 2023 -0500

    Use await syntax for promises in VoxelPrimitiveSpec

commit 9e6b8fbcc8b729b15567d06d5d908d48b26af773
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 15 13:41:25 2023 -0500

    Use cleaner interface to construct SpatialNode children

commit 589bbd36bf61bcedb81b099d4bc9dbcdc31452ea
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 01:29:19 2023 +0800

    Change type in docs

commit aaa98a2f71a8754dc3d0bb691924c194c47ab8c6
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 01:28:03 2023 +0800

    Add missing constructor type to primitive type

commit fa6d4522fc4480f051a02db45bd6e2e23caef736
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 01:02:18 2023 +0800

    Remove the missing backup types

commit 2fb7c7d4658040bf737c8d08b6be8a3c8c7d5cdd
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 16 00:42:59 2023 +0800

    Types in Material module backup

commit 290421de8ab03bf0f38848c308bc31f63cb239cf
Merge: 1340c174c6 d1dd625c6c
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 15 11:08:58 2023 -0500

    Merge branch 'voxel-resolution' into voxel-lighting

commit 1340c174c6a809dc1bcb8524d4e3a3a10d41b795
Merge: fec282b55d 4855df37ee
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 15 11:03:02 2023 -0500

    Merge branch 'main' into voxel-lighting

commit d1dd625c6cd0e5b64dba37fef3ca54ec6a15d1aa
Merge: 6cc387df34 4855df37ee
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 15 11:02:21 2023 -0500

    Merge branch 'main' into voxel-resolution

commit b83bbbf6079ecd3f70336cd1f8a57143308e7987
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Feb 14 17:09:37 2023 -0500

    Document and clean up Cesium3DTilesetTraversal

commit c5349d6e5ae67c31d24b758ff3fcd94ac4bc33b4
Merge: ee5840ed16 5bde3b3992
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 14 14:52:48 2023 -0500

    Merge branch 'no-ready-promises' into imagery-ready-promise

commit 5bde3b3992b3fd1f8900afabe5329fd3d420435d
Merge: 314b037929 a70e106ebb
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Tue Feb 14 13:32:57 2023 -0600

    Merge pull request #11078 from CesiumGS/terrain-provider-config

    Async event handler for terrain providers

commit a70e106ebb77193d035fd7574bf16daca60a7a56
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 14 13:52:23 2023 -0500

    Update baseLayerPicker specs

commit 48529bf0cd26a5e613486bfa21e0a91b2dd21b72
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 14 13:18:05 2023 -0500

    Update terrain async Sandcastles

commit d2615060d2fdb129f253ae640b1b36666e1d8328
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Feb 14 12:56:17 2023 -0500

    Add specs for VoxelPrimitive

commit 06c92887d62a08c4c1c3a0578f98aa6552afd1a6
Merge: 233b00bb5c 314b037929
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 14 10:45:46 2023 -0500

    Merge branch 'no-ready-promises' into terrain-provider-config

commit 233b00bb5ce1b24096d86c4f9a59c4eab927b924
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 14 10:44:42 2023 -0500

    Cleanup

commit 9fae451ac8a5245175ed878209c78f289bd71958
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 13 18:42:19 2023 -0500

    Add specs for SpatialNode

commit 284f2bdd6e9452e5168726d4407003d606cca6eb
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 13 16:52:40 2023 -0500

    Use smaller functions in SpatialNode and VoxelTraversal

commit ee5840ed16e0a44cc1fd4da40c1b2809d0fba299
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 13 12:22:09 2023 -0500

    Fix typo in deprecation message

commit e07c8629c11c89b060435935498f22acf69bbfb9
Author: jiangheng <jiangheng90@live.com>
Date:   Sat Feb 11 02:07:34 2023 +0800

    remove TODO comment

commit d03f16b92c42635fb22b2589b650190aec4a8770
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Feb 10 09:52:53 2023 -0500

    Update docs and deprecation warnings

commit f13e84b666cb28e453080eac2a8342300fc28104
Author: onsummer <onsummer@foxmail.com>
Date:   Fri Feb 10 16:54:45 2023 +0800

    Update CHANGES.md

commit 2257347b7b0a56cd22410b0b33180fdb237bb58e
Merge: 160ba46520 4855df37ee
Author: onsummer <onsummer@foxmail.com>
Date:   Fri Feb 10 16:41:41 2023 +0800

    Fix conflict

commit 160ba46520808bacb5454ea7580fc78f22728366
Author: onsummer <onsummer@foxmail.com>
Date:   Fri Feb 10 16:39:36 2023 +0800

    The missing types same as last commit

commit 3d8f53819fcf942f2bfbebaedfa65cae45365e2a
Author: onsummer <onsummer@foxmail.com>
Date:   Fri Feb 10 16:35:41 2023 +0800

    Change constructor type to primitive type for: Object, Number, String, Boolean; and standardize the generic syntax of Array and Promise

commit 4855df37ee77be69923d6e57f807ca5b6219ad95
Merge: 9dcdc69a10 637df4b7c7
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Feb 9 09:36:09 2023 -0500

    Merge pull request #11083 from jiangheng90/fix-requestWebGl1-type-error

    Fixed requestWebgl1 hint error in context

commit 637df4b7c7ba3b7f805f4484e8ddb8a31a79692b
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Thu Feb 9 15:30:29 2023 +0800

    Fixed requestWebgl1 hint error in context

commit 9ea3c9ac09f9f70b4129831e9661dbbbbe1035f8
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 9 14:38:05 2023 +0800

    Add function types for callback function.

commit 863d53d27fcc1845777a5e5033296878c18da217
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 9 13:55:56 2023 +0800

    Fix build-ts & build-docs error.

commit bef1f4bf93e235904b67bc7787ae0e4c09115445
Merge: 40597989c2 9dcdc69a10
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 9 13:12:10 2023 +0800

    Merge branch 'main' of github.com:CesiumGS/cesium into ts-type-enhance

commit 40597989c281b5cb37ecaf9919b2287edb49681e
Author: onsummer <onsummer@foxmail.com>
Date:   Thu Feb 9 13:10:08 2023 +0800

    Implement types - init

commit 314b037929e3dfc400efae9577c5ea8794e7f7c1
Merge: b5233df9ff 263340f867
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Feb 8 17:11:08 2023 -0600

    Merge pull request #11060 from CesiumGS/top-level-await

    Use top level await in Sandcastle

commit 263340f8675398f776bab85e90adabbdf612525f
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 8 17:19:04 2023 -0500

    Fix remaining sandcastles

commit c95cbc6b8061ce35acb530f6abd969c49d668567
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 8 16:03:05 2023 -0500

    Cleanup doc

commit b6b0663e491a87fe1249b1f3d309dd6613a3907e
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 8 15:40:57 2023 -0500

    Async event handler for terrain providers

commit 9dcdc69a10719fde494e30a4ce68d4e6144a2aff
Merge: 7ecae1eba3 e2b6769461
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Wed Feb 8 13:30:23 2023 -0600

    Merge pull request #11053 from CesiumGS/cube-map-ready-promise

    Remove ready promise from OctahedralProjectedCubeMap, fix fail condition

commit 592872ee9f797ee045230012bc38a19b936ca413
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 8 13:54:09 2023 -0500

    Update GoogleEarthEnterpriseMapsProvider.js

commit 5064d9c2e5e1a0d5a6f4727eabeff05da5bad886
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 8 11:38:23 2023 -0500

    Allow lazy-loading for SingleTileImageryProvider

commit e17a30833e39906b38ca8f78c4fedb50a30abc97
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Wed Feb 8 08:49:11 2023 +0800

    halfing arcLength from delta

commit b3bac1ea40e359f8c6f916cfe27bd0902fdf0621
Merge: a003b21d5c 7ecae1eba3
Author: jiangheng90 <jiangheng90@live.com>
Date:   Wed Feb 8 08:45:33 2023 +0800

    Merge branch 'main' into smooth-zoom-with-mouse-wheel

commit fec282b55d197c66e3eb1fad19493c62a3afc492
Merge: ca38b2c36c 05eebc7e9a
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Feb 7 19:22:35 2023 -0500

    Merge branch 'main' into voxel-lighting

commit 7ecae1eba347b1fbd75ddabfe79fda1e648d6155
Merge: 05eebc7e9a ced1958140
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Feb 7 15:50:40 2023 -0500

    Merge pull request #11069 from verybigzhouhai/origin/main

    optimize Primitive.prototype.getGeometryInstanceAttributes cache performance

commit ca38b2c36c21879ccb3e65415d1ae4c503a485d8
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Feb 7 10:43:51 2023 -0500

    Update processVoxelPropertiesSpec

commit 0d9566e913486f12b6f25e09dc894a2ddf646bf8
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 6 17:15:15 2023 -0500

    Cleanup

commit 5ca80c77f2824d8159ca275b49fdd2a4c55862b2
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Tue Feb 7 09:30:39 2023 -0500

    voxels: use WebGL1 fallback for integer mod

commit ced19581407a95eb7f2a840f4e9c3fb200b614be
Author: Zhouhai <850168627@qq.com>
Date:   Tue Feb 7 15:41:18 2023 +0800

    Update CHANGES.md

commit 8d311efa45b9961f3f153e0a6b66a7cd0c64a6fd
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 6 23:27:42 2023 -0500

    voxels: use clipping plane normals

commit 011ffe03ed1dbe016e483a1d6036400102349b3d
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 6 22:02:09 2023 -0500

    voxels: add setIntersection methods for RayShapeIntersection structs

commit 79acbf28d4ad2798812588cd25a02c481267236f
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 6 16:49:56 2023 -0500

    Spec cleanup

commit 78e066c46de3a26b101f5223b5233543e10e8855
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 6 16:37:24 2023 -0500

    voxels: simplify RayShapeIntersection struct

commit 1eab81fc56dd30057743cf2118064e6e54e46155
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 6 15:08:58 2023 -0500

    Cleanup

commit 0e2f4daa8d565bd4ceb4c3ecc115d29c3afc66ce
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 6 13:18:44 2023 -0500

    voxels: use RayShapeIntersection struct for utilities

commit 9fff2746f615c2b2812d3a31c7588e6bfb438548
Author: Gabby Getz <gabby@cesium.com>
Date:   Mon Feb 6 13:05:06 2023 -0500

    Remove irrelevevant changes

commit cf97444752194a216f6a07958af7b6962074c00a
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Mon Feb 6 10:37:38 2023 -0500

    voxels: remove ray shift for normals calculation

commit a003b21d5ca30391742b6be3e68a3e12d17fcacd
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Mon Feb 6 09:38:59 2023 +0800

    use last frame pick result when zoom inertia

commit aa82d9a542230f8c030b416d5c2b2bc6e0d71930
Author: zhouhai <850168627@qq.com>
Date:   Sat Feb 4 09:18:42 2023 +0800

    optimize Primitive.prototype.getGeometryInstanceAttributes performance

    Primitive.prototype.getGeometryInstanceAttributes

commit 3fe60dc82c8fba58feae6825b6d82aff89500c7c
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Fri Feb 3 15:15:15 2023 -0500

    voxels: use t-dependent epsilon for box normals

commit 3f6608f66e3297ff6a701550c39e041277c9e0f4
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Jan 31 16:59:38 2023 -0500

    Use top level await in Sandcastle

commit b6545c4c12265e6319c65491b2fd9b1a844bcde4
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Fri Feb 3 10:03:58 2023 -0500

    voxels: return normal from box intersection

commit 4f71d1a9b415366e3cad898d636d9498653b295a
Author: jiangheng <jiangheng90@live.com>
Date:   Fri Feb 3 20:18:17 2023 +0800

    simplify and remove useless debouce

commit 9939a5bb6b566d21beb8a7beff53ff72b29bfe87
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 23:30:58 2023 -0500

    voxels: return vec4 from intersectPlane

commit 69457caffa3f6fb0c94da817e9860185e050b890
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 20:15:31 2023 -0500

    voxels: define struct for shape intersections

commit 8d9a30992eb5d62d7c21f33c484dc1c8b9f01f50
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 19:51:08 2023 -0500

    voxels: use normal length to encode intersection type

commit 19c61e6c86485c4409df1207214f019594728a9d
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 19:28:01 2023 -0500

    voxels: use vec4s for intersections

commit dfe5b2c9b56197d045ea3ad9b0b75a8fa4dfd959
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 19:17:33 2023 -0500

    voxels: Add surfaceNormal to fsInput, fill with dummy

commit 16a8e31c6224ece2383e4e3626e101c9ebf5a60f
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 19:10:57 2023 -0500

    voxels: simplify initializeIntersections

commit fc949a7db4608e9a4a60d000c07506e2c32bfa06
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 19:06:44 2023 -0500

    Always use vec2s for intersections

commit 6cc387df3404958389fc96121a7c1a50748050b7
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 16:30:00 2023 -0500

    Resolve TODO comments

commit f1c491a8d87cd4e21cf18b03096cb55eab2df205
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 16:18:30 2023 -0500

    voxels: simplify box render bounds

commit f82d59a92b9cdbaa2240d4c726ddd247e12e64f7
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 14:23:49 2023 -0500

    voxels: simplify box intersections

commit bbfafdf20af16b8703cbf1feeeca3caf96854038
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Thu Feb 2 13:14:48 2023 -0500

    Flatten if blocks in IntersectBox.glsl

commit 6f2e4461401fff7e51ac9496e1836e65ec3c902d
Merge: 65fb9fed8f bf80efa061
Author: Gabby Getz <gabby@cesium.com>
Date:   Thu Feb 2 10:38:25 2023 -0500

    Merge branch 'top-level-await' into imagery-ready-promise

commit 19cf7d71f7e1491287d8533c337bd8035b07620d
Author: zhouhai <850168627@qq.com>
Date:   Thu Feb 2 16:45:14 2023 +0800

    optimize performance

    when the cache exists, the attribute _lastPerInstanceAttributeIndex will fail

commit 05eebc7e9ad38d9f49f629b28171a63f0c82ec66
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 13:34:54 2023 -0500

    Add Sandcastle thumbnail

commit 1330875b4ca526eda2e1d9e7ffb398a44774b33c
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 12:58:23 2023 -0500

    Updates for 1.102

commit 498d270a21251d5a7c31c5e05b889cb18cd0969e
Merge: 8a181824cf 9e5baf6384
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 12:32:49 2023 -0500

    Merge pull request #11065 from CesiumGS/breaking-changes

    Update Coding Guide with note about deprecations

commit 8a181824cf9d41d53df1f4a1507c4de9853995d8
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 11:23:28 2023 -0500

    Update ThirdParty.json

commit 89ac084eaa699da4f704f11a8a1708f4b049eb7d
Merge: 49044564fd b8a0e7b8ae
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 11:14:36 2023 -0500

    Merge pull request #11064 from CesiumGS/npm-modules-updates

    Npm modules updates

commit b8a0e7b8ae35dce2bdcdc3fcd2333897ee8e171d
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 10:53:16 2023 -0500

    Fixup clean task

commit 9e5baf6384fd3e0eabf0c1df5d4ff4ba6a3372fe
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 10:33:33 2023 -0500

    Audit last few CHNAGES.md release notes for breaking changes from deprecations

commit 1a7c59a4e50b02a70609e39354f423190bb6b044
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 1 10:18:14 2023 -0500

    Update rimraf

commit 71908d41950ac6483b0beb61197c2434e268d795
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 1 10:14:40 2023 -0500

    Update mkdirp

commit 8f0a65f844dd772aef32c4895d9d64eb8efccb87
Author: Jeshurun Hembd <jeshurun@cesium.com>
Date:   Wed Feb 1 10:12:00 2023 -0500

    Update markdownlint-cli

commit 7978ff39594beaf77be7fc32cb40bab151adc46b
Author: Gabby Getz <gabby@cesium.com>
Date:   Wed Feb 1 09:29:47 2023 -0500

    Update Coding Guide with note about deprecations

    Add a note to the coding guide stating deprecated APIs should be mentioned in CHANGES.md upon their removal

commit a8998f4c0c532367c42a539b02bc9c7f649a92c9
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Wed Feb 1 15:57:03 2023 +0800

    fix debounce not work

commit df469b807f852dc2b307044d6943410a9b5a6c74
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Wed Feb 1 15:37:00 2023 +0800

    use debounce simlulate wheel start and end

commit cb58d18e08f42e5c43de33e1d85ea36776044710
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Wed Feb 1 10:49:05 2023 +0800

    update lastMovement copy in aggregator

commit b41528040d659604964021a7d6e60b24471b0dbd
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Wed Feb 1 10:20:40 2023 +0800

    add changes in CHANGES.md

commit 0370548f447311b38b713c20e70a8731ab696a76
Author: jiangheng <“jiangheng@geoway.com.cn”>
Date:   Wed Feb 1 10:02:06 2023 +0800

    implement inertiaZoom in aggregator

commit bf80efa061816c77918d19d89631c8ca608ce35a
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Jan 31 16:59:38 2023 -0500

    Use top level await in Sandcastle

commit 65fb9fed8f7d71ce6227038679186c39076ee4b5
Author: Gabby Getz <gabby@cesium.com>
Date:   Tue Jan 31 16:06:57 2023 -0500

    draft

commit b5233df9ff58306e84ebc4670e586edcdaa074e8
Merge: 857ab2e1f7 0286bf29e4
Author: Jeshurun Hembd <41167620+jjhembd@users.noreply.github.com>
Date:   Tue Jan 31 11:25:47 2023 -0600

    Merge pull request #11033 from CesiumGS/terrain-ready-promise

    Deprecate `ready`/`readyPromise` for terrainProviders

commit 49044564fd5aad64d34e51b36d2bf6117665ee02
Merge: edb4a61362 119fd5e7b2
Author: Sean Lilley <lilleyse@gmail.com>
Date:   Mon Jan 30 13:39:54 2023 -0500

    Merge pull request #11056 from CesiumGS/fix-rgb565-spec

    Fix incorrectly-passing spec for `AttributeCompression.decodeRGB565`

commit 119fd5e7b2b4e13d654eef717e5d9702435575b8
Author: Janine Liu <janine.h.liu@gmail.com>
Date:   Mon Jan 30 11:18:42 2023 -0500

    Fix decodeRGB565 spec

commit e2b6769461f6b14bcf397b0eba5cd5a30ab926bf
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Jan 27 14:07:41 2023 -0500

    Remove ready promise from OctahedralProjectedCubeMap, fix fail condition

commit 52f27c1bbb6ea5841563dec3345f5bf971e32d29
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Jan 27 15:48:08 2023 -0500

    Draft

commit 66bd73919a71a310925a208a0d5072020283aac2
Merge: 2cf7da369d 0286bf29e4
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Jan 27 14:24:06 2023 -0500

    Merge branch 'terrain-ready-promise' into imagery-ready-promise

commit 2cf7da369da23acf243ae2e6b3653790d27bf9c8
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Jan 27 13:27:47 2023 -0500

    Imagery provider ready promise deprecations

commit edb4a613622e09ff77627d6abe2d3772443afdeb
Merge: e912d6c2e8 a1d8c1f326
Author: Gabby Getz <gabby@cesium.com>
Date:   Fri Jan 27 09:20:43 2023 -0500

    Merge pull request #11049 from Lakshmi0710/main

    Provide Hyperlink to Bing Maps ToU instead of Bing Maps top page

commit a1d8c1f32695f8a0df57d853599b104ef5d97942
Author: Lakshmi0710 <1196049…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants