(function (global, factory) { if (typeof define === "function" && define.amd) { define(["exports", "three", "../materials/NodeMaterial.js", "../inputs/ScreenNode.js"], factory); } else if (typeof exports !== "undefined") { factory(exports, require("three"), require("../materials/NodeMaterial.js"), require("../inputs/ScreenNode.js")); } else { var mod = { exports: {} }; factory(mod.exports, global.three, global.NodeMaterial, global.ScreenNode); global.NodePostProcessing = mod.exports; } })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _three, _NodeMaterial, _ScreenNode) { "use strict"; Object.defineProperty(_exports, "__esModule", { value: true }); _exports.NodePostProcessing = void 0; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var NodePostProcessing = /*#__PURE__*/function () { function NodePostProcessing(renderer, renderTarget) { _classCallCheck(this, NodePostProcessing); if (renderTarget === undefined) { var parameters = { minFilter: _three.LinearFilter, magFilter: _three.LinearFilter, format: _three.RGBAFormat }; var size = renderer.getDrawingBufferSize(new _three.Vector2()); renderTarget = new _three.WebGLRenderTarget(size.width, size.height, parameters); } this.renderer = renderer; this.renderTarget = renderTarget; this.output = new _ScreenNode.ScreenNode(); this.material = new _NodeMaterial.NodeMaterial(); this.camera = new _three.OrthographicCamera(-1, 1, 1, -1, 0, 1); this.scene = new _three.Scene(); this.quad = new _three.Mesh(new _three.PlaneGeometry(2, 2), this.material); this.quad.frustumCulled = false; // Avoid getting clipped this.scene.add(this.quad); this.needsUpdate = true; } _createClass(NodePostProcessing, [{ key: "render", value: function render(scene, camera, frame) { if (this.needsUpdate) { this.material.dispose(); this.material.fragment.value = this.output; this.material.build(); if (this.material.uniforms.renderTexture) { this.material.uniforms.renderTexture.value = this.renderTarget.texture; } this.needsUpdate = false; } frame.setRenderer(this.renderer).setRenderTexture(this.renderTarget.texture); this.renderer.setRenderTarget(this.renderTarget); this.renderer.render(scene, camera); frame.updateNode(this.material); this.renderer.setRenderTarget(null); this.renderer.render(this.scene, this.camera); } }, { key: "setPixelRatio", value: function setPixelRatio(value) { this.renderer.setPixelRatio(value); var size = this.renderer.getSize(new _three.Vector2()); this.setSize(size.width, size.height); } }, { key: "setSize", value: function setSize(width, height) { var pixelRatio = this.renderer.getPixelRatio(); this.renderTarget.setSize(width * pixelRatio, height * pixelRatio); this.renderer.setSize(width, height); } }, { key: "copy", value: function copy(source) { this.output = source.output; return this; } }, { key: "toJSON", value: function toJSON(meta) { var isRootObject = meta === undefined || typeof meta === 'string'; if (isRootObject) { meta = { nodes: {} }; } if (meta && !meta.post) meta.post = {}; if (!meta.post[this.uuid]) { var data = {}; data.uuid = this.uuid; data.type = 'NodePostProcessing'; meta.post[this.uuid] = data; if (this.name !== '') data.name = this.name; if (JSON.stringify(this.userData) !== '{}') data.userData = this.userData; data.output = this.output.toJSON(meta).uuid; } meta.post = this.uuid; return meta; } }]); return NodePostProcessing; }(); _exports.NodePostProcessing = NodePostProcessing; });