HalftonePass.js 1.4 KB

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