cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
62 lines (61 loc) • 2.11 kB
JavaScript
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 };