threepipe
Version:
A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.
19 lines (17 loc) • 1.17 kB
text/typescript
import {DataTexture, WebGLRenderTarget} from 'three'
import {EXRExporter, EXRExporterParseOptions} from 'three/examples/jsm/exporters/EXRExporter.js'
import {IExportWriter} from '../IExporter'
import {IRenderTarget} from '../../rendering'
export class EXRExporter2 extends EXRExporter implements IExportWriter {
async parseAsync(obj: IRenderTarget|DataTexture, options: EXRExporterParseOptions): Promise<Blob> {
const target = <IRenderTarget>obj
if (target.isWebGLRenderTarget && !target.renderManager) throw new Error('No renderManager on renderTarget')
if (!target.isWebGLRenderTarget && !(<DataTexture>obj).isDataTexture) throw new Error('Invalid object type')
if (target.isWebGLRenderTarget && target.textures.length > 1 && options.textureIndex === undefined)
console.warn('RenderTarget has multiple textures, but no textureIndex specified. Using texture 0.')
const res = target.isWebGLRenderTarget ?
this.parse(target.renderManager!.webglRenderer, <WebGLRenderTarget>target, options) :
this.parse(<DataTexture>obj, options)
return new Blob([res], {type: 'image/x-exr'})
}
}