/**
|
* @author alteredq / http://alteredqualia.com/
|
*/
|
|
THREE.ShaderPass = function (shader, textureID) {
|
|
THREE.Pass.call(this);
|
|
this.textureID = (textureID !== undefined) ? textureID : "tDiffuse";
|
|
if (shader instanceof THREE.ShaderMaterial) {
|
|
this.uniforms = shader.uniforms;
|
|
this.material = shader;
|
|
} else if (shader) {
|
|
this.uniforms = THREE.UniformsUtils.clone(shader.uniforms);
|
|
this.material = new THREE.ShaderMaterial({
|
|
defines: Object.assign({}, shader.defines),
|
uniforms: this.uniforms,
|
vertexShader: shader.vertexShader,
|
fragmentShader: shader.fragmentShader
|
|
});
|
|
}
|
|
this.camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
|
this.scene = new THREE.Scene();
|
|
this.quad = new THREE.Mesh(new THREE.PlaneBufferGeometry(2, 2), null);
|
this.quad.frustumCulled = false; // Avoid getting clipped
|
this.scene.add(this.quad);
|
|
};
|
|
THREE.ShaderPass.prototype = Object.assign(Object.create(THREE.Pass.prototype), {
|
|
constructor: THREE.ShaderPass,
|
|
render: function (renderer, writeBuffer, readBuffer, delta, maskActive) {
|
|
if (this.uniforms[this.textureID]) {
|
|
this.uniforms[this.textureID].value = readBuffer.texture;
|
|
}
|
|
this.quad.material = this.material;
|
|
if (this.renderToScreen) {
|
|
renderer.render(this.scene, this.camera);
|
|
} else {
|
|
renderer.render(this.scene, this.camera, writeBuffer, this.clear);
|
|
}
|
|
}
|
|
});
|