Pārlūkot izejas kodu

JSM: Added module and TS file for TexturePass and ClearPass.

Mugen87 6 gadi atpakaļ
vecāks
revīzija
20cf59b9e4

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

@@ -158,10 +158,12 @@
 				</li>
 				<li>postprocessing
 					<ul>
+						<li>ClearPass</li>
 						<li>EffectComposer</li>
 						<li>MaskPass</li>
 						<li>RenderPass</li>
 						<li>ShaderPass</li>
+						<li>TexturePass</li>
 					</ul>
 				</li>
 				<li>renderers

+ 1 - 1
examples/js/postprocessing/ClearPass.js

@@ -17,7 +17,7 @@ THREE.ClearPass.prototype = Object.assign( Object.create( THREE.Pass.prototype )
 
 	constructor: THREE.ClearPass,
 
-	render: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
+	render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
 
 		var oldClearColor, oldClearAlpha;
 

+ 2 - 1
examples/js/postprocessing/TexturePass.js

@@ -36,7 +36,7 @@ THREE.TexturePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
 
 	constructor: THREE.TexturePass,
 
-	render: function ( renderer, writeBuffer, readBuffer, deltaTime, maskActive ) {
+	render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
 
 		var oldAutoClear = renderer.autoClear;
 		renderer.autoClear = false;
@@ -52,6 +52,7 @@ THREE.TexturePass.prototype = Object.assign( Object.create( THREE.Pass.prototype
 		this.fsQuad.render( renderer );
 
 		renderer.autoClear = oldAutoClear;
+
 	}
 
 } );

+ 11 - 0
examples/jsm/postprocessing/ClearPass.d.ts

@@ -0,0 +1,11 @@
+import {
+  Color
+} from '../../../src/Three';
+
+import { Pass } from './Pass';
+
+export class ClearPass extends Pass {
+  constructor(clearColor?: Color | string | number, clearAlpha?: number);
+  clearColor: Color | string | number;
+  clearAlpha: number;
+}

+ 49 - 0
examples/jsm/postprocessing/ClearPass.js

@@ -0,0 +1,49 @@
+/**
+ * @author mrdoob / http://mrdoob.com/
+ */
+
+
+import { Pass } from "../postprocessing/Pass.js";
+
+var ClearPass = function ( clearColor, clearAlpha ) {
+
+	Pass.call( this );
+
+	this.needsSwap = false;
+
+	this.clearColor = ( clearColor !== undefined ) ? clearColor : 0x000000;
+	this.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 0;
+
+};
+
+ClearPass.prototype = Object.assign( Object.create( Pass.prototype ), {
+
+	constructor: ClearPass,
+
+	render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
+
+		var oldClearColor, oldClearAlpha;
+
+		if ( this.clearColor ) {
+
+			oldClearColor = renderer.getClearColor().getHex();
+			oldClearAlpha = renderer.getClearAlpha();
+
+			renderer.setClearColor( this.clearColor, this.clearAlpha );
+
+		}
+
+		renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
+		renderer.clear();
+
+		if ( this.clearColor ) {
+
+			renderer.setClearColor( oldClearColor, oldClearAlpha );
+
+		}
+
+	}
+
+} );
+
+export { ClearPass };

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

@@ -0,0 +1,15 @@
+import {
+  Texture,
+  ShaderMaterial
+} from '../../../src/Three';
+
+import { Pass } from './Pass';
+
+export class TexturePass extends Pass {
+  constructor(map: Texture, opacity?: number);
+  map: Texture;
+  opacity: number;
+  uniforms: object;
+  material: ShaderMaterial;
+  fsQuad: object;
+}

+ 67 - 0
examples/jsm/postprocessing/TexturePass.js

@@ -0,0 +1,67 @@
+/**
+ * @author alteredq / http://alteredqualia.com/
+ */
+
+import {
+	ShaderMaterial,
+	UniformsUtils
+} from "../../../build/three.module.js";
+import { Pass } from "../postprocessing/Pass.js";
+import { CopyShader } from "../shaders/CopyShader.js";
+
+var TexturePass = function ( map, opacity ) {
+
+	Pass.call( this );
+
+	if ( CopyShader === undefined )
+		console.error( "TexturePass relies on CopyShader" );
+
+	var shader = CopyShader;
+
+	this.map = map;
+	this.opacity = ( opacity !== undefined ) ? opacity : 1.0;
+
+	this.uniforms = UniformsUtils.clone( shader.uniforms );
+
+	this.material = new ShaderMaterial( {
+
+		uniforms: this.uniforms,
+		vertexShader: shader.vertexShader,
+		fragmentShader: shader.fragmentShader,
+		depthTest: false,
+		depthWrite: false
+
+	} );
+
+	this.needsSwap = false;
+
+	this.fsQuad = new Pass.FullScreenQuad( null );
+
+};
+
+TexturePass.prototype = Object.assign( Object.create( Pass.prototype ), {
+
+	constructor: TexturePass,
+
+	render: function ( renderer, writeBuffer, readBuffer /*, deltaTime, maskActive */ ) {
+
+		var oldAutoClear = renderer.autoClear;
+		renderer.autoClear = false;
+
+		this.fsQuad.material = this.material;
+
+		this.uniforms[ "opacity" ].value = this.opacity;
+		this.uniforms[ "tDiffuse" ].value = this.map;
+		this.material.transparent = ( this.opacity < 1.0 );
+
+		renderer.setRenderTarget( this.renderToScreen ? null : readBuffer );
+		if ( this.clear ) renderer.clear();
+		this.fsQuad.render( renderer );
+
+		renderer.autoClear = oldAutoClear;
+
+	}
+
+} );
+
+export { TexturePass };

+ 2 - 0
utils/modularize.js

@@ -67,9 +67,11 @@ var files = [
 	{ path: 'pmrem/PMREMCubeUVPacker.js', dependencies: [], ignoreList: [] },
 	{ path: 'pmrem/PMREMGenerator.js', dependencies: [], ignoreList: [] },
 
+	{ path: 'postprocessing/ClearPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' } ], ignoreList: [] },
 	{ path: 'postprocessing/EffectComposer.js', dependencies: [ { name: 'CopyShader', path: 'shaders/CopyShader.js' }, { name: 'ShaderPass', path: 'postprocessing/ShaderPass.js' }, { name: 'MaskPass', path: 'postprocessing/MaskPass.js' }, { name: 'ClearMaskPass', path: 'postprocessing/MaskPass.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/ShaderPass.js', dependencies: [ { name: 'Pass', path: 'postprocessing/Pass.js' } ], ignoreList: [] },
 
 	{ path: 'renderers/CSS2DRenderer.js', dependencies: [], ignoreList: [] },