HalftonePass.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * @author meatbags / xavierburrow.com, github/meatbags
  3. */
  4. THREE.HalftonePass = function(width, height) {
  5. THREE.Pass.call(this);
  6. this.width = width;
  7. this.height = height;
  8. if (THREE.HalftoneShader === undefined) {
  9. console.error('THREE.HalftonePass requires THREE.HalftoneShader');
  10. }
  11. this.uniforms = THREE.UniformsUtils.clone(THREE.HalftoneShader.uniforms);
  12. this.material = new THREE.ShaderMaterial({
  13. uniforms: this.uniforms,
  14. fragmentShader: THREE.HalftoneShader.fragmentShader,
  15. vertexShader: THREE.HalftoneShader.vertexShader
  16. });
  17. this.camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
  18. this.scene = new THREE.Scene();
  19. this.quad = new THREE.Mesh(new THREE.PlaneBufferGeometry(2, 2), null);
  20. this.quad.frustumCulled = false;
  21. this.scene.add(this.quad);
  22. };
  23. THREE.HalftonePass.prototype = Object.assign(Object.create(THREE.Pass.prototype), {
  24. constructor: THREE.HalftonePass,
  25. render: function(renderer, writeBuffer, readBuffer, delta, maskActive) {
  26. this.material.uniforms["tDiffuse"].value = readBuffer.texture;
  27. this.quad.material = this.material;
  28. if (this.renderToScreen) {
  29. renderer.render(this.scene, this.camera);
  30. } else {
  31. renderer.render(this.scene, this.camera, writeBuffer, this.clear);
  32. }
  33. },
  34. setSize: function(width, height) {
  35. this.width = width;
  36. this.height = height;
  37. this.uniforms['width'].value = this.width;
  38. this.uniforms['height'].value = this.height;
  39. }
  40. });