import { Object3D, Texture } from 'three'; import { GLTFExporterPlugin, GLTFWriter } from 'three/examples/jsm/exporters/GLTFExporter.js'; import { Gizmos } from '../../engine_gizmos.js'; import { createFlatTexture } from '../../engine_shaders.js'; import { RGBAColor } from '../../js-extensions/index.js'; declare type BeforeWriteArgs = { keep: boolean }; export abstract class BaseWriter implements GLTFExporterPlugin { private readonly writer: GLTFWriter; constructor(writer: GLTFWriter) { this.writer = writer; } writeNode(_node: Object3D) { } } export class GizmoWriter extends BaseWriter { beforeWriteNode(node: Object3D, args: BeforeWriteArgs) { if (Gizmos.isGizmo(node)) { args.keep = false; } } } export class RenderTextureWriter extends BaseWriter { beforeWriteTexture(texture: Texture, args: BeforeWriteArgs & { newTexture?: Texture }) { if (texture.isRenderTargetTexture) { args.newTexture = createFlatTexture(new RGBAColor(1, 1, 1, 0)) } } }