# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [0.3.12] - 2022-08-26
### Fixed
- B3DMLoader: regression causing RTC_CENTER to not be respected.

### Added
- Support for GLTFLoader Cesium_RTC extension.

## [0.3.11] - 2022-07-04
### Added
- Support for determining tile format based on magic bytes.

### Fixed
- Small fixes to the `dispose` function.
- Re-add support for relative tile urls.

## [0.3.10] - 2022-07-02
### Added
- `resetFailedTiles` to enable retry tile downloads that failed.

### Fixed
- Support for loading absolute URIs.
- Fix the application of the tile "up" axis adjustments.

## [0.3.9] - 2022-03-28
### Fixed
- Incorrect argument order to `FeatureTable.getData`

## [0.3.7] - 2022-01-29
### Fixed
- ensuring the working path included a "/" at the end when generating new file paths for the GLTFExtension and B3DM loaders. 

## [0.3.6] - 2022-01-29
### Fixed
- "onPreprocessUrl" is now called for initial Tileset URL.

## [0.3.5] - 2022-01-06
### Added
- `TilesRenderer.onTileVisibilityChange` callback.
- Support for GLTF in tilesets (`3DTILES_content_gltf` extension).

### Changed
- Improved type definitions.
- `PNTSLoader.parse` now returns a promise.
- All model loaders on inherit from a common type.

## [0.3.4] - 2021-11-15
### Added
- PriorityQueue: Added `schedulingCallback` to afford flexibility in job scheduling callback for scenarios where `requestAnimationFrame` will not work, such as with WebXR.

### Fixed
- `autoDisableRendererCulling` incorrectly applying the inverse of the documented effect.
- Screen space error calculations now use the camera projectionMatrix rather than camera type to determine frustum type.

## [0.3.3] - 2021-09-08
### Added
- Support for embedded tileset / tile geometry URLs with hashes, search query parameters.

## [0.3.2] - 2021-09-02
### Changed
- DebugTilesRenderer: Bounding boxes now colored down the tree based on depth.
- DebugTilesRenderer: "MeshStandardMaterial" is now used instead of "MeshBasicMaterial" for debugging.
- TilesRenderer: add `getBoundingSphere` function.

### Added
- DebugTilesRenderer: "RANDOM_NODE_COLOR" visualization setting.
- Names for various tile objects.
- DebugTilesRenderer: Added `getDebugColor` function for adjusing the debug visualization colors.
- Support for computing screen space error for tiles that had sphere bounds but no box bounds.
- DebugTilesRenderer: Added `customColorCallback` and `CUSTOM_COLOR` mode for custom debug coloring.

### Fixed
- I3DMLoader: Fixed embedded absolute URLs not working correctly.
- TilesRenderer: "getBounds" function throwing an error if no bounding box is present on the tileset.

## [0.3.1] - 2021-07-28
### Fixed
- Case where tiles that were outside of the camera frustum would be loaded with a higher priority.
- Case where a single tiles renderer tiles would always be loaded with a higher priority.
- Case where bounding boxes with one dimension of 0 would not compute the distance to camera correctly.

## [0.3.0] - 2021-07-24
### Added
- `path-browserify` dependency explicitly rather than relying on implicit polyfills for `path` package.

### Changed
- `PriorityQueue.priorityCallback` now takes two arguments.
- The default priority sort now accounts for most recently used tiles, screenspace error, and distance to the camera.
- `TilesRenderer.calculateError` no longer returns a value but is now expected to set `__error` and `__distanceToCamera` on the tile itself.

### Fixed
- `TilesRendererBase.preprocessURL` types definition.

## [0.2.11] - 2021-06-03
### Fixed
- PNTS files incorrectly having a GLTF rotation adjustment applied.

## [0.2.10] - 2021-04-15
### Added
- `TilesRenderer.optimizeRaycast` option to disable overriding the raycast function of loaded tiles.

### Changed
- Added "sideEffects: false" to package.json.

### Fixed
- Bounding box visualization not displaying correctly with `DebugTilesRenderer` when the bounds have a width of 0 in one dimension.

## [0.2.9] - 2021-03-03
### Added
- `onLoadTileSet` to the typescript definitions file.

### Fixed
- Feature table attributes like `RTC_CENTER` not being correctly applied to loaded tile geometry.
- `B3DMLoader.load` not correctly resolving with a model.

### Changed
- String decoding to use `TextDecoder`.

## [0.2.8] - 2021-02-26
### Fixed
- Pass fetch options to B3DMLoader.
- Set working path for loaders from CMPTLoader, TilesRenderer callback.
- Adjust loader handler in examples and README to provide GLTFLoader directly.

## [0.2.7] - 2021-02-09
### Added
- Add warnings if unsupported feature semantics are detected for I3DM and PNTS files
- Support for I3DM rotation, scale features.

### Fixed
- A case where I3DM instances could have an incorrect transformations by respecting existing Mesh transformations when converting them to InstancedMeshes.

### Changed
- Make CMPTLoader group child order consistent between loads.

## [0.2.6] - 2021-02-03
### Fixed
- I3DM files not correctly loading external gltf files.

## [0.2.5] - 2021-01-17
### Fixed
- Incorrect use of `multiply` when computing world transformations resulting in incorrect positioning of tiles when non identity transformations are used.

## [0.2.4] - 2021-01-16
### Fixed
- Feature and Batch Tables unnecessarily retaining full file buffer references.

## [0.2.3] - 2020-12-30
### Added
- `getOrientedBounds` function to `TilesRenderer`.
- `preprocessURL` function to `TilesRenderer`.

## [0.2.2] - 2020-12-23
### Fixed
- Incorrectly removing the implicit y-up to z-up GTLF transformation.

## [0.2.1] - 2020-12-15
### Added
- Support for external tile sets.
- B3DM support for RTC_CENTER.

### Fixed
- Add a readable message for when console.assert fails.
- Add url information to log when tile load fails.
- Jittering with I3DM files when instances are positioned at large scales.

## [0.2.0] - 2020-12-02
### Changed
- Compatible three.js version to v0.123.0.

## [0.1.7] - 2020-11-09
### Changed
- `PriorityQueue` to wait a frame to schedule new tasks instead of using `Promise.resolve` so tasks will only be started once per frame.

## [0.1.6] - 2020-10-08
### Added
- `batchTable` and `featureTable` fields onto loaded B3DM, I3DM, and PNTS scene objects directly.
- `stopAtEmptyTiles` which defaults to false so tilesets correctly stop traversal at empty tiles.

### Changed
- Tileset traversal now correctly stops at empty tiles if they do no meet the SSE requirement. Previous behavior can be retained for now by settings `stopAtEmptyTiles` to `false`.

### Fixed
- Typescript declaration files for `CMPT`, `I3DM`, and `PNTS` loaders.

## [0.1.5] - 2020-08-21
### Added

- `manager` field to `TilesRenderer` to enable support for DRACO decompression.
- `TilesRenderer.onLoadTileSet` callback function.
- Support for "ADD" tile refinement.

### Fixed

- `CMPTLoader` not importing `I3DMLoader`.
- A case where if the tile at depth `maxDepth` was empty nothing would be rendered.
- A case where an error was thrown if a mid tile had no content.

## [0.1.4] - 2020-07-17
### Added

- `TilesRenderer.dispose` function to completely dispose of all loaded geometry, materials, and textures in the scene when the renderer is no longer needed.
- `TilesRenderer.onDisposeModel` function which is called when a tile model is disposed of from the cache.

### Fixed

- Case where the url protocol was converted to use a single slash instead of two when loading a model.
- Corner case where an error was thrown if the tileset was dragged off screen out of camera view.

## [0.1.3] - 2020-07-12
### Added

- Basic support for CMPT, PNTS, and I3DM file formats.
- `autoDisableRendererCulling` field to `TilesRenderer`.
- A count of the amount of failed tile content loads to `TilesRenderer.stats`.

### Fixed

- Failed tileset downloads being indefinitely retried.
- Tile content stats not being correctly updated if a tile failed to load.
- Not propagating image load errors.
- DebugTilesRenderer using a different color for every submesh in a tile. Now a single color is used for every submesh in a tile.
- Tiles not rendering if an empty tile is encountered.
- Child tiles not rendering if a parent tile content failed to load.

### Changed

- Improved `update` function performance by deferring LRUCache array update.

## [0.1.2] - 2020-06-08
### Changed

- License text in README to remove unnecessary copy.


## [0.1.0] - 2020-05-29

- Initial release.
