HalftonePass.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import {
  2. ShaderMaterial,
  3. UniformsUtils
  4. } from 'three';
  5. import { Pass, FullScreenQuad } from './Pass.js';
  6. import { HalftoneShader } from '../shaders/HalftoneShader.js';
  7. /**
  8. * RGB Halftone pass for three.js effects composer. Requires HalftoneShader.
  9. */
  10. class HalftonePass extends Pass {
  11. constructor( width, height, params ) {
  12. super();
  13. this.uniforms = UniformsUtils.clone( HalftoneShader.uniforms );
  14. this.material = new ShaderMaterial( {
  15. uniforms: this.uniforms,
  16. fragmentShader: HalftoneShader.fragmentShader,
  17. vertexShader: HalftoneShader.vertexShader
  18. } );
  19. // set params
  20. this.uniforms.width.value = width;
  21. this.uniforms.height.value = height;
  22. for ( const key in params ) {
  23. if ( params.hasOwnProperty( key ) && this.uniforms.hasOwnProperty( key ) ) {
  24. this.uniforms[ key ].value = params[ key ];
  25. }
  26. }
  27. this.fsQuad = new FullScreenQuad( this.material );
  28. }
  29. render( renderer, writeBuffer, readBuffer/*, deltaTime, maskActive*/ ) {
  30. this.material.uniforms[ 'tDiffuse' ].value = readBuffer.texture;
  31. if ( this.renderToScreen ) {
  32. renderer.setRenderTarget( null );
  33. this.fsQuad.render( renderer );
  34. } else {
  35. renderer.setRenderTarget( writeBuffer );
  36. if ( this.clear ) renderer.clear();
  37. this.fsQuad.render( renderer );
  38. }
  39. }
  40. setSize( width, height ) {
  41. this.uniforms.width.value = width;
  42. this.uniforms.height.value = height;
  43. }
  44. dispose() {
  45. this.material.dispose();
  46. this.fsQuad.dispose();
  47. }
  48. }
  49. export { HalftonePass };