KHR_texture_basisu.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { IGLTFLoaderExtension } from "../glTFLoaderExtension";
  2. import { GLTFLoader, ArrayItem } from "../glTFLoader";
  3. import { ITexture } from "../glTFLoaderInterfaces";
  4. import { BaseTexture } from "babylonjs/Materials/Textures/baseTexture";
  5. import { Nullable } from "babylonjs/types";
  6. const NAME = "KHR_texture_basisu";
  7. interface IKHRTextureBasisU {
  8. source: number;
  9. }
  10. /**
  11. * [Proposed Specification](https://github.com/KhronosGroup/glTF/pull/1751)
  12. * !!! Experimental Extension Subject to Changes !!!
  13. */
  14. export class KHR_texture_basisu implements IGLTFLoaderExtension {
  15. /** The name of this extension. */
  16. public readonly name = NAME;
  17. /** Defines whether this extension is enabled. */
  18. public enabled: boolean;
  19. private _loader: GLTFLoader;
  20. /** @hidden */
  21. constructor(loader: GLTFLoader) {
  22. this._loader = loader;
  23. this.enabled = loader.isExtensionUsed(NAME);
  24. }
  25. /** @hidden */
  26. public dispose() {
  27. delete this._loader;
  28. }
  29. /** @hidden */
  30. public _loadTextureAsync(context: string, texture: ITexture, assign: (babylonTexture: BaseTexture) => void): Nullable<Promise<BaseTexture>> {
  31. return GLTFLoader.LoadExtensionAsync<IKHRTextureBasisU, BaseTexture>(context, texture, this.name, (extensionContext, extension) => {
  32. const sampler = (texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._loader.gltf.samplers, texture.sampler));
  33. const image = ArrayItem.Get(`${extensionContext}/source`, this._loader.gltf.images, extension.source);
  34. return this._loader._createTextureAsync(context, sampler, image, (babylonTexture) => {
  35. babylonTexture.gammaSpace = false;
  36. assign(babylonTexture);
  37. });
  38. });
  39. }
  40. }
  41. GLTFLoader.RegisterExtension(NAME, (loader) => new KHR_texture_basisu(loader));