Przeglądaj źródła

Fix Floating target export and originalColorSpace in RenderTargetPreviewPlugin

master
Palash Bansal 3 lat temu
rodzic
commit
a133bf8123
No account linked to committer's email address
1 zmienionych plików z 13 dodań i 8 usunięć
  1. 13
    8
      src/plugins/ui/RenderTargetPreviewPlugin.ts

+ 13
- 8
src/plugins/ui/RenderTargetPreviewPlugin.ts Wyświetl plik

@@ -1,11 +1,11 @@
import {AViewerPluginSync, ThreeViewer} from '../../viewer'
import {IRenderTarget} from '../../rendering'
import {createDiv, createStyles, getOrCall, onChange, ValOrFunc} from 'ts-browser-helpers'
import {Vector4, WebGLRenderTarget} from 'three'
import {SRGBColorSpace, Vector4, WebGLRenderTarget} from 'three'
import styles from './RenderTargetPreviewPlugin.css'
import {CustomContextMenu} from '../../utils'

export class RenderTargetPreviewPlugin <TEvent extends string> extends AViewerPluginSync<TEvent> {
export class RenderTargetPreviewPlugin<TEvent extends string> extends AViewerPluginSync<TEvent> {
static readonly PluginType = 'RenderTargetPreviewPlugin'

@onChange(RenderTargetPreviewPlugin.prototype.refreshUi) enabled = true
@@ -60,15 +60,18 @@ export class RenderTargetPreviewPlugin <TEvent extends string> extends AViewerPl
rect.y = canvasRect.height + canvasRect.y - rect.y - rect.height
if (Array.isArray(tex)) {
// todo support multi target
console.warn('todo: multi target')
this._viewer.console.warn('Multi target preview not supported yet')
continue
}
const outputColorSpace = this._viewer.renderManager.webglRenderer.outputColorSpace
if (!target.originalColorSpace) this._viewer.renderManager.webglRenderer.outputColorSpace = SRGBColorSpace
this._viewer.renderManager.blit(null, {
source: tex,
clear: !target.transparent,
respectColorSpace: !target.originalColorSpace,
viewport: new Vector4(rect.x, rect.y, rect.width, rect.height),
})
this._viewer.renderManager.webglRenderer.outputColorSpace = outputColorSpace
}
}

@@ -117,20 +120,22 @@ export class RenderTargetPreviewPlugin <TEvent extends string> extends AViewerPl
const tex = target.texture
if (Array.isArray(tex)) {
// todo support multi target
console.warn('todo: multi target')
this._viewer.dialog.alert('Multi target not supported yet')
this._viewer.console.warn('support multi target export')
return this
}
const canvas = this._viewer?.canvas
if (!canvas) return this
// todo: encoding?
const dataUrl = this._viewer.renderManager.renderTargetToDataUrl(target as WebGLRenderTarget, 'image/jpeg')
const blob = this._viewer.renderManager.exportRenderTarget(target as WebGLRenderTarget)
const url = URL.createObjectURL(blob)
const link = document.createElement('a')
document.body.appendChild(link)
link.style.display = 'none'
link.href = dataUrl
link.download = 'image.png'
link.href = url
link.download = 'renderTarget.' + (blob.ext || 'png')
link.click()
document.body.removeChild(link)
URL.revokeObjectURL(url)
return this
}


Ładowanie…
Anuluj
Zapisz