| @@ -1,16 +1,23 @@ | |||
| import {_testFinish, DepthBufferPlugin, downloadBlob, HalfFloatType, ThreeViewer} from 'threepipe' | |||
| import { | |||
| _testFinish, | |||
| DepthBufferPlugin, | |||
| downloadBlob, | |||
| HalfFloatType, | |||
| RenderTargetPreviewPlugin, | |||
| ThreeViewer, | |||
| } from 'threepipe' | |||
| import {createSimpleButtons} from '../examples-utils/simple-bottom-buttons.js' | |||
| const viewer = new ThreeViewer({ | |||
| canvas: document.getElementById('mcanvas') as HTMLCanvasElement, | |||
| msaa: true, | |||
| msaa: false, | |||
| rgbm: true, | |||
| zPrepass: false, | |||
| }) | |||
| async function init() { | |||
| viewer.addPluginSync(new DepthBufferPlugin(HalfFloatType, true)) | |||
| const depth = viewer.addPluginSync(new DepthBufferPlugin(HalfFloatType, true)) | |||
| await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr') | |||
| await viewer.load('https://threejs.org/examples/models/gltf/kira.glb', { | |||
| @@ -21,6 +28,10 @@ async function init() { | |||
| viewer.renderManager.autoBuildPipeline = false | |||
| viewer.renderManager.pipeline = ['render', 'screen'] | |||
| const targetPreview = viewer.addPluginSync(RenderTargetPreviewPlugin) | |||
| targetPreview.addTarget(()=>depth.target, 'depth', false, true) | |||
| targetPreview.addTarget(()=>viewer.renderManager.composerTarget, 'composer-1', false, false) | |||
| createSimpleButtons({ | |||
| ['depth']: () => { | |||
| viewer.renderManager.pipeline = ['depth'] | |||
| @@ -1,6 +1,6 @@ | |||
| { | |||
| "name": "threepipe", | |||
| "version": "0.0.30", | |||
| "version": "0.0.31", | |||
| "description": "A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.", | |||
| "main": "dist/index.js", | |||
| "module": "dist/index.mjs", | |||
| @@ -1,7 +1,7 @@ | |||
| { | |||
| "name": "@threepipe/plugin-configurator", | |||
| "description": "Plugins for creating material and object configurators in threepipe.", | |||
| "version": "0.1.0", | |||
| "version": "0.1.1", | |||
| "devDependencies": { | |||
| }, | |||
| "dependencies": { | |||
| @@ -143,7 +143,7 @@ export class RenderTargetPreviewPlugin<TEvent extends string> extends AViewerPlu | |||
| if (Array.isArray(tex)) { | |||
| // todo support multi target | |||
| this._viewer.dialog.alert('Multi target not supported yet') | |||
| this._viewer.console.warn('support multi target export') | |||
| this._viewer.console.warn('todo: support multi target export') | |||
| return this | |||
| } | |||
| const canvas = this._viewer?.canvas | |||
| @@ -51,6 +51,7 @@ export class ScreenPass extends ExtendedShaderPass implements IPipelinePass<'scr | |||
| super.render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) | |||
| this._lastReadBuffer = readBuffer | |||
| renderer.outputColorSpace = colorSpace | |||
| this._needsReRender = false | |||
| } | |||
| reRender(renderer: IWebGLRenderer, writeBuffer?: WebGLMultipleRenderTargets | WebGLRenderTarget | null, deltaTime?: number, maskActive?: boolean) { | |||
| @@ -113,7 +113,8 @@ export function matDefine(key?: string|symbol, customDefines?: any, thisMat = fa | |||
| * @param deleteOnFalse - sets to undefined instead of '0' when false. Note deleteOnFalse doesn't work with tweakpane ui because the value will be undefined. | |||
| */ | |||
| export function matDefineBool(key?: string|symbol, customDefines?: any, thisMat = false, onChange?: (...args: any[]) => any, deleteOnFalse = false): PropertyDecorator { | |||
| return matDefine(key, customDefines, thisMat, onChange, (v: any)=>v ? '1' : deleteOnFalse ? undefined : '0', (v: any)=>v && v !== '0') | |||
| // noinspection RedundantConditionalExpressionJS | |||
| return matDefine(key, customDefines, thisMat, onChange, (v: any)=>v ? '1' : deleteOnFalse ? undefined : '0', (v: any|undefined)=>v && v !== '0' ? true : false) | |||
| } | |||
| /** | |||
| @@ -1 +1 @@ | |||
| export const VERSION = '0.0.30' | |||
| export const VERSION = '0.0.31' | |||