Răsfoiți Sursa

JSM: Added module and TS file for SavePass.

Mugen87 6 ani în urmă
părinte
comite
9562a8dc01

+ 1 - 0
docs/manual/en/introduction/Import-via-modules.html

@@ -166,6 +166,7 @@
 						<li>FilmPass</li>
 						<li>MaskPass</li>
 						<li>RenderPass</li>
+						<li>SavePass</li>
 						<li>ShaderPass</li>
 						<li>TexturePass</li>
 					</ul>

+ 15 - 0
examples/jsm/postprocessing/SavePass.d.ts

@@ -0,0 +1,15 @@
+import {
+  ShaderMaterial,
+  WebGLRenderTarget
+} from '../../../src/Three';
+
+import { Pass } from './Pass';
+
+export class SavePass extends Pass {
+  constructor(renderTarget: WebGLRenderTarget);
+  textureID: string;
+  renderTarget: WebGLRenderTarget;
+  uniforms: object;
+  material: ShaderMaterial;
+  fsQuad: object;
+}

+ 71 - 0
examples/jsm/postprocessing/SavePass.js

@@ -0,0 +1,71 @@
+/**
+ * @author alteredq / http://alteredqualia.com/
+ */
+
+import {
+	LinearFilter,
+	RGBFormat,
+	ShaderMaterial,
+	UniformsUtils,
+	WebGLRenderTarget
+} from "../../../build/three.module.js";
+import { Pass } from "../postprocessing/Pass.js";
+import { CopyShader } from "../shaders/CopyShader.js";
+
+var SavePass = function ( renderTarget ) {
+
+	Pass.call( this );
+
+	if ( CopyShader === undefined )
+		console.error( "SavePass relies on CopyShader" );
+
+	var shader = CopyShader;
+
+	this.textureID = "tDiffuse";
+
+	this.uniforms = UniformsUtils.clone( shader.uniforms );
+
+	this.material = new ShaderMaterial( {
+
+		uniforms: this.uniforms,
+		vertexShader: shader.vertexShader,
+		fragmentShader: shader.fragmentShader
+
+	} );
+
+	this.renderTarget = renderTarget;
+
+	if ( this.renderTarget === undefined ) {
+
+		this.renderTarget = new WebGLRenderTarget( window.innerWidth, window.innerHeight, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBFormat, stencilBuffer: false } );
+		this.renderTarget.texture.name = "SavePass.rt";
+
+	}
+
+	this.needsSwap = false;
+
+	this.fsQuad = new Pass.FullScreenQuad( this.material );
+
+};
+
+SavePass.prototype = Object.assign( Object.create( Pass.prototype ), {
+
+	constructor: SavePass,
+
+	render: function ( renderer, writeBuffer, readBuffer ) {
+
+		if ( this.uniforms[ this.textureID ] ) {
+
+			this.uniforms[ this.textureID ].value = readBuffer.texture;
+
+		}
+
+		renderer.setRenderTarget( this.renderTarget );
+		if ( this.clear ) renderer.clear();
+		this.fsQuad.render( renderer );
+
+	}
+
+} );
+
+export { SavePass };

+ 2 - 1
utils/modularize.js

@@ -75,8 +75,9 @@ var files = [
 	{ path: 'postprocessing/FilmPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'FilmShader', path: 'shaders/FilmShader.js' } ], ignoreList: [] },
 	{ path: 'postprocessing/MaskPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' } ], ignoreList: [] },
 	{ path: 'postprocessing/RenderPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' } ], ignoreList: [] },
-	{ path: 'postprocessing/TexturePass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'CopyShader', path: 'shaders/CopyShader.js' } ], ignoreList: [] },
+	{ path: 'postprocessing/SavePass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'CopyShader', path: 'shaders/CopyShader.js' } ], ignoreList: [] },
 	{ path: 'postprocessing/ShaderPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' } ], ignoreList: [] },
+	{ path: 'postprocessing/TexturePass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' }, { name: 'CopyShader', path: 'shaders/CopyShader.js' } ], ignoreList: [] },
 
 	{ path: 'renderers/CSS2DRenderer.js', dependencies: [], ignoreList: [] },
 	{ path: 'renderers/CSS3DRenderer.js', dependencies: [], ignoreList: [] },