UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

62 lines (61 loc) 2.11 kB
import CompositorNode from "./CompositorNode.mjs"; import glenum from "../core/glenum.mjs"; import FrameBuffer from "../FrameBuffer.mjs"; var SceneNode = CompositorNode.extend( { name: "scene", scene: null, camera: null, autoUpdateScene: true, preZ: false }, function() { this.frameBuffer = new FrameBuffer(); }, { render: function(renderer) { this._rendering = true; var _gl = renderer.gl; this.trigger("beforerender"); var renderInfo; if (!this.outputs) { renderInfo = renderer.render(this.scene, this.camera, !this.autoUpdateScene, this.preZ); } else { var frameBuffer = this.frameBuffer; for (var name in this.outputs) { var parameters = this.updateParameter(name, renderer); var outputInfo = this.outputs[name]; var texture = this._compositor.allocateTexture(parameters); this._outputTextures[name] = texture; var attachment = outputInfo.attachment || _gl.COLOR_ATTACHMENT0; if (typeof attachment == "string") { attachment = _gl[attachment]; } frameBuffer.attach(texture, attachment); } frameBuffer.bind(renderer); var ext = renderer.getGLExtension("EXT_draw_buffers"); if (ext) { var bufs = []; for (var attachment in this.outputs) { attachment = parseInt(attachment); if (attachment >= _gl.COLOR_ATTACHMENT0 && attachment <= _gl.COLOR_ATTACHMENT0 + 8) { bufs.push(attachment); } } ext.drawBuffersEXT(bufs); } renderer.saveClear(); renderer.clearBit = glenum.DEPTH_BUFFER_BIT | glenum.COLOR_BUFFER_BIT; renderInfo = renderer.render(this.scene, this.camera, !this.autoUpdateScene, this.preZ); renderer.restoreClear(); frameBuffer.unbind(renderer); } this.trigger("afterrender", renderInfo); this._rendering = false; this._rendered = true; } } ); var CompoSceneNode = SceneNode; export { CompoSceneNode as default };