物管理前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.5 KiB

  1. (function () {
  2. class ShaderPass extends THREE.Pass {
  3. constructor(shader, textureID) {
  4. super();
  5. this.textureID = textureID !== undefined ? textureID : "tDiffuse";
  6. if (shader instanceof THREE.ShaderMaterial) {
  7. this.uniforms = shader.uniforms;
  8. this.material = shader;
  9. } else if (shader) {
  10. this.uniforms = THREE.UniformsUtils.clone(shader.uniforms);
  11. this.material = new THREE.ShaderMaterial({
  12. defines: Object.assign({}, shader.defines),
  13. uniforms: this.uniforms,
  14. vertexShader: shader.vertexShader,
  15. fragmentShader: shader.fragmentShader
  16. });
  17. }
  18. this.fsQuad = new THREE.FullScreenQuad(this.material);
  19. }
  20. render(
  21. renderer,
  22. writeBuffer,
  23. readBuffer
  24. /*, deltaTime, maskActive */
  25. ) {
  26. if (this.uniforms[this.textureID]) {
  27. this.uniforms[this.textureID].value = readBuffer.texture;
  28. }
  29. this.fsQuad.material = this.material;
  30. if (this.renderToScreen) {
  31. renderer.setRenderTarget(null);
  32. this.fsQuad.render(renderer);
  33. } else {
  34. renderer.setRenderTarget(writeBuffer); // TODO: Avoid using autoClear properties, see https://github.com/mrdoob/three.js/pull/15571#issuecomment-465669600
  35. if (this.clear)
  36. renderer.clear(
  37. renderer.autoClearColor,
  38. renderer.autoClearDepth,
  39. renderer.autoClearStencil
  40. );
  41. this.fsQuad.render(renderer);
  42. }
  43. }
  44. }
  45. THREE.ShaderPass = ShaderPass;
  46. })();