glTFBinaryExtension.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { GLTFLoaderExtension, GLTFLoader, GLTFLoaderBase } from "./glTFLoader.js";
  2. import { GLTFUtils } from "./glTFLoaderUtils.js";
  3. import { EComponentType } from "./glTFLoaderInterfaces.js";
  4. const BinaryExtensionBufferName = "binary_glTF";
  5. /**
  6. * @internal
  7. * @deprecated
  8. */
  9. export class GLTFBinaryExtension extends GLTFLoaderExtension {
  10. constructor() {
  11. super("KHR_binary_glTF");
  12. }
  13. loadRuntimeAsync(scene, data, rootUrl, onSuccess) {
  14. const extensionsUsed = data.json.extensionsUsed;
  15. if (!extensionsUsed || extensionsUsed.indexOf(this.name) === -1 || !data.bin) {
  16. return false;
  17. }
  18. this._bin = data.bin;
  19. onSuccess(GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));
  20. return true;
  21. }
  22. loadBufferAsync(gltfRuntime, id, onSuccess, onError) {
  23. if (gltfRuntime.extensionsUsed.indexOf(this.name) === -1) {
  24. return false;
  25. }
  26. if (id !== BinaryExtensionBufferName) {
  27. return false;
  28. }
  29. this._bin.readAsync(0, this._bin.byteLength).then(onSuccess, (error) => onError(error.message));
  30. return true;
  31. }
  32. loadTextureBufferAsync(gltfRuntime, id, onSuccess) {
  33. const texture = gltfRuntime.textures[id];
  34. const source = gltfRuntime.images[texture.source];
  35. if (!source.extensions || !(this.name in source.extensions)) {
  36. return false;
  37. }
  38. const sourceExt = source.extensions[this.name];
  39. const bufferView = gltfRuntime.bufferViews[sourceExt.bufferView];
  40. const buffer = GLTFUtils.GetBufferFromBufferView(gltfRuntime, bufferView, 0, bufferView.byteLength, EComponentType.UNSIGNED_BYTE);
  41. onSuccess(buffer);
  42. return true;
  43. }
  44. loadShaderStringAsync(gltfRuntime, id, onSuccess) {
  45. const shader = gltfRuntime.shaders[id];
  46. if (!shader.extensions || !(this.name in shader.extensions)) {
  47. return false;
  48. }
  49. const binaryExtensionShader = shader.extensions[this.name];
  50. const bufferView = gltfRuntime.bufferViews[binaryExtensionShader.bufferView];
  51. const shaderBytes = GLTFUtils.GetBufferFromBufferView(gltfRuntime, bufferView, 0, bufferView.byteLength, EComponentType.UNSIGNED_BYTE);
  52. setTimeout(() => {
  53. const shaderString = GLTFUtils.DecodeBufferToText(shaderBytes);
  54. onSuccess(shaderString);
  55. });
  56. return true;
  57. }
  58. }
  59. GLTFLoader.RegisterExtension(new GLTFBinaryExtension());
  60. //# sourceMappingURL=glTFBinaryExtension.js.map