UNPKG

@needle-tools/engine

Version:

Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.

51 lines (31 loc) 1.39 kB
import { Texture } from "three"; import { EXRLoader } from "three/examples/jsm/loaders/EXRLoader.js"; import { type GLTFLoaderPlugin, GLTFParser } from "three/examples/jsm/loaders/GLTFLoader.js"; import { getParam } from "../engine_utils.js"; const debug = getParam("debugexr"); export class EXT_texture_exr implements GLTFLoaderPlugin { get name() { return "EXT_texture_exr" } private parser: GLTFParser; constructor(parser: GLTFParser) { this.parser = parser; if (debug) console.log(parser); } loadTexture(textureIndex): Promise<Texture> | null { const name = this.name; const parser = this.parser; const json = parser.json; const textureDef = json.textures[textureIndex]; if (debug) console.log("EXT_texture_exr.loadTexture", textureIndex, textureDef); if (!textureDef.extensions || !textureDef.extensions[name]) { return null; } const extension = textureDef.extensions[name]; // TODO should the loader be cached here? const loader = new EXRLoader(parser.options.manager); if (debug) console.log("EXT_texture_exr.loadTexture", extension); const promise = parser.loadTextureImage(textureIndex, extension.source, loader) as Promise<Texture>; return promise; } } if (typeof window !== "undefined") window.addEventListener('unhandledrejection', (_event: PromiseRejectionEvent) => { });