/** * R3.D3.API.Composer * @param apiComponent * * @property size * @property renderer * @property renderTarget - Specify this to render to target instead * @property renderTargetA - Used internally during render process * @property renderTargetB - Used internally during render process * @property passes * * @constructor */ R3.D3.API.Composer = function( apiComponent ) { __API_COMPONENT__; if (R3.Utils.UndefinedOrNull(apiComponent.size)) { apiComponent.size = new R3.API.Vector2( { parent : this, register : true, name : this.name + ' - Size', x : 512, y : 512 } ); } this.size = apiComponent.size; if (R3.Utils.UndefinedOrNull(apiComponent.renderer)) { apiComponent.renderer = null; } this.renderer = apiComponent.renderer; if (R3.Utils.UndefinedOrNull(apiComponent.camera)) { apiComponent.camera = null; } this.camera = apiComponent.camera; if (R3.Utils.UndefinedOrNull(apiComponent.rendererTarget)) { apiComponent.rendererTarget = null; } this.rendererTarget = apiComponent.rendererTarget; if (R3.Utils.UndefinedOrNull(apiComponent.rendererTargetA)) { apiComponent.rendererTargetA = null; } this.rendererTargetA = apiComponent.rendererTargetA; if (R3.Utils.UndefinedOrNull(apiComponent.renderTargetB)) { apiComponent.renderTargetB = null; } this.renderTargetB = apiComponent.renderTargetB; if (R3.Utils.UndefinedOrNull(apiComponent.passes)) { var passes = []; if (this.renderer && this.renderer.scenes) { /** * Construct default render passes */ passes = this.renderer.scenes.reduce( function(result, scene) { result.push( new R3.D3.API.Pass.Render( { parent : this, scene : scene, name : this.name + ' - Render Pass', camera : this.camera } ) ); return result; }.bind(this), [] ); } if (this.renderer) { passes.push( new R3.D3.API.Pass.Bloom( { parent: this, name: this.name + ' - Bloom Pass', renderer: this.renderer } ) ); } if (this.renderer) { passes.push( new R3.D3.API.Pass.FXAA( { parent: this, name: this.name + ' - FXAA Pass', renderer: this.renderer } ) ); } apiComponent.passes = passes; } this.passes = apiComponent.passes; }; R3.D3.API.Composer.prototype = Object.create(R3.API.Component.prototype); R3.D3.API.Composer.prototype.constructor = R3.D3.API.Composer;