diff --git a/src/game-lib-a-1-event.js b/src/game-lib-a-1-event.js index c5f116e..b8636c2 100644 --- a/src/game-lib-a-1-event.js +++ b/src/game-lib-a-1-event.js @@ -95,7 +95,7 @@ GameLib.Event.GET_REMOTE_API_URL = 0x4d; GameLib.Event.COMPONENT_TYPES_UPDATE = 0x4e; GameLib.Event.DELAYED_INSTANCE_ENCOUNTERED = 0x4f; GameLib.Event.CAST_SOURCE_CHANGED = 0x50; -// GameLib.Event.ANIMATION_MESH_ADDED = 0x51; +GameLib.Event.RESOLVE_DEPENDENCIES = 0x51; // GameLib.Event.ANIMATION_MESH_REMOVED = 0x52; GameLib.Event.CANVAS_CHANGE = 0x53; GameLib.Event.AFTER_WINDOW_RESIZE = 0x54; @@ -222,7 +222,7 @@ GameLib.Event.GetEventName = function(number) { case 0x4e : return 'component_types_update'; case 0x4f : return 'delayed_instance_encountered'; case 0x50 : return 'cast_source_changed'; - case 0x51 : return 'unused';//'animation_mesh_added'; + case 0x51 : return 'resolve_dependencies';; case 0x52 : return 'unused';//'animation_mesh_removed'; case 0x53 : return 'dom_element_change'; case 0x54 : return 'after_window_resize'; diff --git a/src/game-lib-a-component-a.js b/src/game-lib-a-component-a.js index ccaff41..23dfe82 100644 --- a/src/game-lib-a-component-a.js +++ b/src/game-lib-a-component-a.js @@ -142,7 +142,14 @@ GameLib.Component.prototype.createInstance = function() { { component: this } - ) + ); + + GameLib.Event.Emit( + GameLib.Event.RESOLVE_DEPENDENCIES, + { + component: this + } + ); } if (this instanceof GameLib.Entity) { @@ -263,8 +270,8 @@ GameLib.Component.GUI = 0x1e; GameLib.Component.IMAGE = 0x1f; GameLib.Component.ENTITY = 0x20; GameLib.Component.OBJECT = 0x21; -//GameLib.Component.MESH_PLANE = 0x22; -//GameLib.Component.MESH_CURVE = 0x23; +GameLib.Component.RENDERER_D2 = 0x22; +GameLib.Component.RENDERER_D3 = 0x23; GameLib.Component.PHYSICS_WORLD = 0x24; GameLib.Component.BROADPHASE = 0x25; GameLib.Component.SOLVER = 0x26; @@ -438,10 +445,10 @@ GameLib.Component.GetComponentInfo = function(number) { apiConstructor : GameLib.D3.API.Material.Standard }; case 0x3 : return { - name : 'GameLib.D3.Renderer', - runtime : GameLib.Component.GRAPHICS_RUNTIME, - constructor : GameLib.D3.Renderer, - apiConstructor : GameLib.D3.API.Renderer + name : 'GameLib.Renderer', + runtime : GameLib.Component.DEFAULT_RUNTIME, + constructor : GameLib.Renderer, + apiConstructor : GameLib.API.Renderer }; case 0x4 : return { name : 'GameLib.Server', @@ -619,18 +626,18 @@ GameLib.Component.GetComponentInfo = function(number) { constructor : GameLib.D3.Object, apiConstructor : GameLib.D3.API.Object }; - case 0x22 : return null;/*{ - name : 'GameLib.D3.Mesh.Plane', + case 0x22 : return { + name : 'GameLib.Renderer.D2', + runtime : GameLib.Component.DEFAULT_RUNTIME, + constructor : GameLib.Renderer.D2, + apiConstructor : GameLib.API.Renderer.D2 + }; + case 0x23 : return { + name : 'GameLib.Renderer.D3', runtime : GameLib.Component.GRAPHICS_RUNTIME, - constructor : GameLib.D3.Mesh.Plane, - apiConstructor : GameLib.D3.API.Mesh - };*/ - case 0x23 : return null;/*{ - name : 'GameLib.D3.Mesh.Curve', - runtime : GameLib.Component.GRAPHICS_RUNTIME, - constructor : GameLib.D3.Mesh.Curve, - apiConstructor : GameLib.D3.API.Mesh - };*/ + constructor : GameLib.Renderer.D3, + apiConstructor : GameLib.API.Renderer.D3 + }; case 0x24 : return { name : 'GameLib.D3.PhysicsWorld', runtime : GameLib.Component.PHYSICS_RUNTIME, @@ -1852,7 +1859,10 @@ GameLib.Component.prototype.save = function(remote) { /** * We don't store children objects of entities which are not explicitly defined as children of this entity. */ - if (this.components.indexOf(component) === -1) { + if ( + this.components.indexOf(component) === -1 && + this !== component + ) { /** * We don't want to store this component - but other components may depend on it diff --git a/src/game-lib-api-render-configuration.js b/src/game-lib-api-render-configuration.js index e2738e6..f0a85e6 100644 --- a/src/game-lib-api-render-configuration.js +++ b/src/game-lib-api-render-configuration.js @@ -49,12 +49,12 @@ GameLib.API.RenderConfiguration = function ( this.logicalSize = logicalSize; if (GameLib.Utils.UndefinedOrNull(aspectRatio)) { - aspectRatio = GameLib.D3.API.Renderer.ASPECT_RATIO_3_2; + aspectRatio = GameLib.API.Renderer.ASPECT_RATIO_3_2; } this.aspectRatio = aspectRatio; if (GameLib.Utils.UndefinedOrNull(scaleMode)) { - scaleMode = GameLib.D3.API.Renderer.SCALE_MODE_LETTERBOX; + scaleMode = GameLib.API.Renderer.SCALE_MODE_LETTERBOX; } this.scaleMode = scaleMode; diff --git a/src/game-lib-api-renderer-a.js b/src/game-lib-api-renderer-a.js new file mode 100644 index 0000000..ffb5ad5 --- /dev/null +++ b/src/game-lib-api-renderer-a.js @@ -0,0 +1,120 @@ +/** + * GameLib.API.Renderer + * @param id + * @param name + * @param rendererType + * @param parentEntity + * @param width + * @param height + * @param canvas + * @constructor + */ +GameLib.API.Renderer = function ( + id, + name, + rendererType, + parentEntity, + width, + height, + canvas +) { + if (GameLib.Utils.UndefinedOrNull(id)) { + id = GameLib.Utils.RandomId(); + } + this.id = id; + + if (GameLib.Utils.UndefinedOrNull(rendererType)) { + rendererType = GameLib.API.Renderer.RENDERER_TYPE_NONE; + } + this.rendererType = rendererType; + + if (GameLib.Utils.UndefinedOrNull(name)) { + + switch (this.rendererType) { + case GameLib.API.Renderer.RENDERER_TYPE_NONE : + name = "Renderer"; + break; + case GameLib.API.Renderer.RENDERER_TYPE_2D : + name = "Renderer 2D"; + break; + case GameLib.API.Renderer.RENDERER_TYPE_3D : + name = "Renderer 3D"; + break; + default : + console.warn('no nice name for renderer'); + break; + } + + name += " (" + this.id + ")"; + } + this.name = name; + + if (GameLib.Utils.UndefinedOrNull(width)) { + width = 1; + } + this.width = width; + + if (GameLib.Utils.UndefinedOrNull(height)) { + height = 1; + } + this.height = height; + + if (GameLib.Utils.UndefinedOrNull(canvas)) { + canvas = new GameLib.API.Canvas( + null, + null, + 512, + 512 + ); + } + this.canvas = canvas; + + GameLib.API.Component.call( + this, + GameLib.API.Renderer.GetComponentType(this.rendererType), + parentEntity + ); + +}; + +GameLib.API.Renderer.prototype = Object.create(GameLib.API.Component.prototype); +GameLib.API.Renderer.prototype.constructor = GameLib.API.Renderer; + +GameLib.API.Renderer.GetComponentType = function(rendererType) { + + var componentType = null; + + switch (rendererType) { + case GameLib.API.Renderer.RENDERER_TYPE_NONE : + componentType = GameLib.Component.RENDERER; + break; + case GameLib.API.Renderer.RENDERER_TYPE_2D : + componentType = GameLib.Component.RENDERER_D2; + break; + case GameLib.API.Renderer.RENDERER_TYPE_3D : + componentType = GameLib.Component.RENDERER_D3; + break; + default : + console.warn('could not determine component type'); + break; + } + + return componentType; +}; + +GameLib.API.Renderer.RENDERER_TYPE_NONE = 0x0; +GameLib.API.Renderer.RENDERER_TYPE_2D = 0x1; +GameLib.API.Renderer.RENDERER_TYPE_3D = 0x2; + +GameLib.API.Renderer.MODE_CANVAS = 0x1; +GameLib.API.Renderer.MODE_TARGET = 0x2; +GameLib.API.Renderer.MODE_CANVAS_AND_TARGET = 0x3; + +GameLib.API.Renderer.SHADOW_MAP_TYPE_BASIC = 0; +GameLib.API.Renderer.SHADOW_MAP_TYPE_PCF = 1; +GameLib.API.Renderer.SHADOW_MAP_TYPE_PCF_SOFT = 2; + +GameLib.API.Renderer.TONE_MAPPING_LINEAR = 1; +GameLib.API.Renderer.TONE_MAPPING_REINHARD = 2; +GameLib.API.Renderer.TONE_MAPPING_UNCHARTED_2 = 3; +GameLib.API.Renderer.TONE_MAPPING_CINEON = 4; diff --git a/src/game-lib-api-renderer-d2.js b/src/game-lib-api-renderer-d2.js new file mode 100644 index 0000000..2b5fb20 --- /dev/null +++ b/src/game-lib-api-renderer-d2.js @@ -0,0 +1,34 @@ +/** + * GameLib.API.Renderer.D2 + * @constructor + * @param apiRenderer + */ +GameLib.API.Renderer.D2 = function ( + apiRenderer +) { + + if (GameLib.Utils.UndefinedOrNull(apiRenderer)) { + apiRenderer = { + rendererType : GameLib.API.Renderer.RENDERER_TYPE_2D + }; + } + + if (GameLib.Utils.UndefinedOrNull(apiRenderer.rendererType)) { + apiRenderer.rendererType = GameLib.API.Renderer.RENDERER_TYPE_2D; + } + + GameLib.API.Renderer.call( + this, + apiRenderer.id, + apiRenderer.name, + apiRenderer.rendererType, + apiRenderer.parentEntity, + apiRenderer.width, + apiRenderer.height, + apiRenderer.canvas + ); + +}; + +GameLib.API.Renderer.D2.prototype = Object.create(GameLib.API.Renderer.prototype); +GameLib.API.Renderer.D2.prototype.constructor = GameLib.API.Renderer.D2; \ No newline at end of file diff --git a/src/game-lib-d3-api-renderer.js b/src/game-lib-api-renderer-d3.js similarity index 77% rename from src/game-lib-d3-api-renderer.js rename to src/game-lib-api-renderer-d3.js index 0a0e6f7..d70b5c0 100644 --- a/src/game-lib-d3-api-renderer.js +++ b/src/game-lib-api-renderer-d3.js @@ -1,9 +1,6 @@ /** - * GameLib.D3.API.Renderer - * @param id - * @param name - * @param width - * @param height + * GameLib.API.Renderer.D3 + * @param apiRenderer * @param renderMode * @param autoClear * @param autoClearColor @@ -31,21 +28,16 @@ * @param preserveDrawingBuffer * @param depth * @param logarithmicDepthBuffer - * @param offset - * @param canvas - * @param renderTarget * @param localClippingEnabled + * @param offset + * @param renderTarget * @param clippingPlanes * @param clearColor * @param viewports - * @param parentEntity * @constructor */ -GameLib.D3.API.Renderer = function ( - id, - name, - width, - height, +GameLib.API.Renderer.D3 = function ( + apiRenderer, renderMode, autoClear, autoClearColor, @@ -75,35 +67,24 @@ GameLib.D3.API.Renderer = function ( logarithmicDepthBuffer, localClippingEnabled, offset, - canvas, renderTarget, clippingPlanes, clearColor, - viewports, - parentEntity + viewports ) { - if (GameLib.Utils.UndefinedOrNull(id)) { - id = GameLib.Utils.RandomId(); - } - this.id = id; - if (GameLib.Utils.UndefinedOrNull(name)) { - name = "Renderer (" + this.id + ")"; + if (GameLib.Utils.UndefinedOrNull(apiRenderer)) { + apiRenderer = { + rendererType : GameLib.API.Renderer.RENDERER_TYPE_3D + }; } - this.name = name; - if (GameLib.Utils.UndefinedOrNull(width)) { - width = 1; + if (GameLib.Utils.UndefinedOrNull(apiRenderer.rendererType)) { + apiRenderer.rendererType = GameLib.API.Renderer.RENDERER_TYPE_3D; } - this.width = width; - - if (GameLib.Utils.UndefinedOrNull(height)) { - height = 1; - } - this.height = height; if (GameLib.Utils.UndefinedOrNull(renderMode)) { - renderMode = GameLib.D3.API.Renderer.MODE_CANVAS; + renderMode = GameLib.API.Renderer.MODE_CANVAS; } this.renderMode = renderMode; @@ -173,7 +154,7 @@ GameLib.D3.API.Renderer = function ( this.shadowMapNeedsUpdate = shadowMapNeedsUpdate; if (GameLib.Utils.UndefinedOrNull(shadowMapType)) { - shadowMapType = GameLib.D3.API.Renderer.SHADOW_MAP_TYPE_BASIC; + shadowMapType = GameLib.API.Renderer.SHADOW_MAP_TYPE_BASIC; } this.shadowMapType = shadowMapType; @@ -193,7 +174,7 @@ GameLib.D3.API.Renderer = function ( this.sortObjects = sortObjects; if (GameLib.Utils.UndefinedOrNull(toneMapping)) { - toneMapping = GameLib.D3.API.Renderer.TONE_MAPPING_LINEAR; + toneMapping = GameLib.API.Renderer.TONE_MAPPING_LINEAR; } this.toneMapping = toneMapping; @@ -247,16 +228,6 @@ GameLib.D3.API.Renderer = function ( } this.offset = offset; - if (GameLib.Utils.UndefinedOrNull(canvas)) { - canvas = new GameLib.API.Canvas( - null, - null, - 512, - 512 - ); - } - this.canvas = canvas; - if (GameLib.Utils.UndefinedOrNull(renderTarget)) { renderTarget = null; } @@ -284,26 +255,18 @@ GameLib.D3.API.Renderer = function ( } this.viewports = viewports; - GameLib.API.Component.call( + GameLib.API.Renderer.call( this, - GameLib.Component.RENDERER, - parentEntity + apiRenderer.id, + apiRenderer.name, + apiRenderer.rendererType, + apiRenderer.parentEntity, + apiRenderer.width, + apiRenderer.height, + apiRenderer.canvas ); }; -GameLib.D3.API.Renderer.prototype = Object.create(GameLib.API.Component.prototype); -GameLib.D3.API.Renderer.prototype.constructor = GameLib.D3.API.Renderer; - -GameLib.D3.API.Renderer.MODE_CANVAS = 0x1; -GameLib.D3.API.Renderer.MODE_TARGET = 0x2; -GameLib.D3.API.Renderer.MODE_CANVAS_AND_TARGET = 0x3; - -GameLib.D3.API.Renderer.SHADOW_MAP_TYPE_BASIC = 0; -GameLib.D3.API.Renderer.SHADOW_MAP_TYPE_PCF = 1; -GameLib.D3.API.Renderer.SHADOW_MAP_TYPE_PCF_SOFT = 2; - -GameLib.D3.API.Renderer.TONE_MAPPING_LINEAR = 1; -GameLib.D3.API.Renderer.TONE_MAPPING_REINHARD = 2; -GameLib.D3.API.Renderer.TONE_MAPPING_UNCHARTED_2 = 3; -GameLib.D3.API.Renderer.TONE_MAPPING_CINEON = 4; +GameLib.API.Renderer.D3.prototype = Object.create(GameLib.API.Renderer.prototype); +GameLib.API.Renderer.D3.prototype.constructor = GameLib.API.Renderer.D3; \ No newline at end of file diff --git a/src/game-lib-canvas.js b/src/game-lib-canvas.js index 9be0ae3..c84ed7f 100644 --- a/src/game-lib-canvas.js +++ b/src/game-lib-canvas.js @@ -80,7 +80,8 @@ GameLib.Canvas.prototype.updateInstance = function(property) { return; } - if (property === 'autoUpdateSize' || + if ( + property === 'autoUpdateSize' || property === 'width' || property === 'height' ) { diff --git a/src/game-lib-d3-composer.js b/src/game-lib-d3-composer.js index eb6bd2f..d8a4cdb 100644 --- a/src/game-lib-d3-composer.js +++ b/src/game-lib-d3-composer.js @@ -32,7 +32,7 @@ GameLib.D3.Composer = function ( GameLib.Component.call( this, { - 'renderer' : GameLib.D3.Renderer, + 'renderer' : GameLib.Renderer, 'renderTarget' : GameLib.D3.RenderTarget, 'passes' : [GameLib.D3.Pass] } diff --git a/src/game-lib-d3-effect-a.js b/src/game-lib-d3-effect-a.js index 5e76dda..f322ff8 100644 --- a/src/game-lib-d3-effect-a.js +++ b/src/game-lib-d3-effect-a.js @@ -28,7 +28,7 @@ GameLib.D3.Effect = function( ); var linkedObjects = { - renderer : GameLib.D3.Renderer + renderer : GameLib.Renderer }; GameLib.Component.call( diff --git a/src/game-lib-render-configuration.js b/src/game-lib-render-configuration.js index eceea1c..79914d7 100644 --- a/src/game-lib-render-configuration.js +++ b/src/game-lib-render-configuration.js @@ -44,7 +44,7 @@ GameLib.RenderConfiguration = function ( { 'activeCamera' : GameLib.D3.Camera, 'activeScenes' : [GameLib.D3.Scene], - 'activeRenderer' : GameLib.D3.Renderer, + 'activeRenderer' : GameLib.Renderer, 'activeComposer' : GameLib.D3.Composer, 'activeEffect' : GameLib.D3.Effect } diff --git a/src/game-lib-renderer-a.js b/src/game-lib-renderer-a.js new file mode 100644 index 0000000..8f0d720 --- /dev/null +++ b/src/game-lib-renderer-a.js @@ -0,0 +1,125 @@ +/** + * GameLib.Renderer + * @param apiRenderer GameLib.API.Renderer + * @property rendererType + * @constructor + */ +GameLib.Renderer = function ( + apiRenderer +) { + + if (GameLib.Utils.UndefinedOrNull(apiRenderer)) { + apiRenderer = { + rendererType : GameLib.API.Renderer.RENDERER_TYPE_NONE + }; + } + + GameLib.API.Renderer.call( + this, + apiRenderer.id, + apiRenderer.name, + apiRenderer.rendererType, + apiRenderer.parentEntity, + apiRenderer.width, + apiRenderer.height, + apiRenderer.canvas + ); + + if (this.canvas instanceof GameLib.API.Canvas) { + this.canvas = new GameLib.Canvas( + this.canvas + ); + } + + GameLib.Component.call( + this, + GameLib.Renderer.GetLinkedObjects(this.rendererType) + ); + +}; + +GameLib.Renderer.prototype = Object.create(GameLib.Component.prototype); +GameLib.Renderer.prototype.constructor = GameLib.Renderer; + +GameLib.Renderer.GetLinkedObjects = function(rendererType) { + + var linkedObjects = { + 'canvas' : GameLib.Canvas + }; + + switch (rendererType) { + case GameLib.API.Renderer.RENDERER_TYPE_3D : + linkedObjects.renderTarget = GameLib.D3.RenderTarget; + linkedObjects.clippingPlanes = [GameLib.Plane]; + linkedObjects.viewports = [GameLib.D3.Viewport]; + break; + } + + return linkedObjects; + +}; + +/** + * Create Renderer Instance + * @returns {*} + */ +GameLib.Renderer.prototype.createInstance = function() { + GameLib.Component.prototype.createInstance.call(this); +}; + +/** + * Update Renderer Instance + */ +GameLib.Renderer.prototype.updateInstance = function(property) { + + if (!property) { + throw new Error('no renderer property'); + } + + if (!this.instance) { + throw new Error('no renderer instance'); + } + + if (property === 'rendererType') { + + var componentType = GameLib.API.Renderer.GetComponentType(this.rendererType); + + this.replace(componentType); + + return; + } + + if ( + property === 'width' || + property === 'height' + ) { + console.log('todo: width and height'); + return; + } + + if (property === 'canvas') { + console.log('todo: canvas update'); + return; + } + + GameLib.Component.prototype.updateInstance.call(this, property); +}; + +/** + * + * @returns {GameLib.API.Renderer} + */ +GameLib.Renderer.prototype.toApiObject = function() { + + var apiRenderer = new GameLib.API.Renderer( + this.id, + this.name, + this.rendererType, + GameLib.Utils.IdOrNull(this.parentEntity), + this.width, + this.height, + GameLib.Utils.IdOrNull(this.canvas) + ); + + return apiRenderer; +}; diff --git a/src/game-lib-renderer-d2.js b/src/game-lib-renderer-d2.js new file mode 100644 index 0000000..fe65794 --- /dev/null +++ b/src/game-lib-renderer-d2.js @@ -0,0 +1,79 @@ +/** + * GameLib.Renderer.D2 + * @param apiRendererD2 GameLib.API.Renderer.D2 + * @constructor + */ +GameLib.Renderer.D2 = function ( + apiRendererD2 +) { + + if (GameLib.Utils.UndefinedOrNull(apiRendererD2)) { + apiRendererD2 = { + rendererType : GameLib.API.Renderer.RENDERER_TYPE_2D + }; + } + + GameLib.API.Renderer.D2.call( + this, + apiRendererD2 + ); + + GameLib.Renderer.call( + this, + this + ); + +}; + +GameLib.Renderer.D2.prototype = Object.create(GameLib.Renderer.prototype); +GameLib.Renderer.D2.prototype.constructor = GameLib.Renderer.D2; + +/** + * Create GameLib.Renderer.D2 Instance + * @returns {*} + */ +GameLib.Renderer.D2.prototype.createInstance = function() { + + if ( + GameLib.Utils.UndefinedOrNull(this.canvas) || + GameLib.Utils.UndefinedOrNull(this.canvas.instance) + ) { + console.warn('no canvas instance'); + return; + } + + this.instance = true; + + GameLib.Renderer.prototype.createInstance.call(this); +}; + +/** + * Update Renderer.D2 Instance + */ +GameLib.Renderer.D2.prototype.updateInstance = function(property) { + + if (!property) { + throw new Error('no renderer property'); + } + + if (!this.instance) { + throw new Error('no renderer instance'); + } + + GameLib.Renderer.prototype.updateInstance.call(this, property); +}; + +/** + * + * @returns {GameLib.API.Renderer.D2} + */ +GameLib.Renderer.D2.prototype.toApiObject = function() { + + var apiRenderer = GameLib.Renderer.prototype.toApiObject.call(this); + + var apiRendererD2 = new GameLib.API.Renderer.D2( + apiRenderer + ); + + return apiRendererD2; +}; diff --git a/src/game-lib-d3-renderer.js b/src/game-lib-renderer-d3.js similarity index 56% rename from src/game-lib-d3-renderer.js rename to src/game-lib-renderer-d3.js index ba3d57f..8c29859 100644 --- a/src/game-lib-d3-renderer.js +++ b/src/game-lib-renderer-d3.js @@ -1,62 +1,59 @@ /** - * GameLib.D3.Renderer + * GameLib.Renderer.D3 * @param graphics GameLib.GraphicsRuntime - * @param apiRenderer GameLib.D3.API.Renderer + * @param apiRendererD3 GameLib.API.Renderer.D3 * @constructor */ -GameLib.D3.Renderer = function ( +GameLib.Renderer.D3 = function ( graphics, - apiRenderer + apiRendererD3 ) { this.graphics = graphics; this.graphics.isNotThreeThrow(); - if (GameLib.Utils.UndefinedOrNull(apiRenderer)) { - apiRenderer = {}; + if (GameLib.Utils.UndefinedOrNull(apiRendererD3)) { + apiRendererD3 = { + rendererType : GameLib.API.Renderer.RENDERER_TYPE_3D + }; } - GameLib.D3.API.Renderer.call( + GameLib.API.Renderer.D3.call( this, - apiRenderer.id, - apiRenderer.name, - apiRenderer.width, - apiRenderer.height, - apiRenderer.renderMode, - apiRenderer.autoClear, - apiRenderer.autoClearColor, - apiRenderer.autoClearDepth, - apiRenderer.autoClearStencil, - apiRenderer.gammaFactor, - apiRenderer.gammaInput, - apiRenderer.gammaOutput, - apiRenderer.maxMorphTargets, - apiRenderer.maxMorphNormals, - apiRenderer.physicallyCorrectLights, - apiRenderer.shadowMapEnabled, - apiRenderer.shadowMapAutoUpdate, - apiRenderer.shadowMapNeedsUpdate, - apiRenderer.shadowMapType, - apiRenderer.shadowMapRenderReverseSided, - apiRenderer.shadowMapRenderSingleSided, - apiRenderer.sortObjects, - apiRenderer.toneMapping, - apiRenderer.toneMappingExposure, - apiRenderer.toneMappingWhitePoint, - apiRenderer.premultipliedAlpha, - apiRenderer.antialias, - apiRenderer.stencil, - apiRenderer.preserveDrawingBuffer, - apiRenderer.depth, - apiRenderer.logarithmicDepthBuffer, - apiRenderer.localClippingEnabled, - apiRenderer.offset, - apiRenderer.canvas, - apiRenderer.renderTarget, - apiRenderer.clippingPlanes, - apiRenderer.clearColor, - apiRenderer.viewports, - apiRenderer.parentEntity + apiRendererD3, + apiRendererD3.renderMode, + apiRendererD3.autoClear, + apiRendererD3.autoClearColor, + apiRendererD3.autoClearDepth, + apiRendererD3.autoClearStencil, + apiRendererD3.gammaFactor, + apiRendererD3.gammaInput, + apiRendererD3.gammaOutput, + apiRendererD3.maxMorphTargets, + apiRendererD3.maxMorphNormals, + apiRendererD3.physicallyCorrectLights, + apiRendererD3.shadowMapEnabled, + apiRendererD3.shadowMapAutoUpdate, + apiRendererD3.shadowMapNeedsUpdate, + apiRendererD3.shadowMapType, + apiRendererD3.shadowMapRenderReverseSided, + apiRendererD3.shadowMapRenderSingleSided, + apiRendererD3.sortObjects, + apiRendererD3.toneMapping, + apiRendererD3.toneMappingExposure, + apiRendererD3.toneMappingWhitePoint, + apiRendererD3.premultipliedAlpha, + apiRendererD3.antialias, + apiRendererD3.stencil, + apiRendererD3.preserveDrawingBuffer, + apiRendererD3.depth, + apiRendererD3.logarithmicDepthBuffer, + apiRendererD3.localClippingEnabled, + apiRendererD3.offset, + apiRendererD3.renderTarget, + apiRendererD3.clippingPlanes, + apiRendererD3.clearColor, + apiRendererD3.viewports ); this.offset = new GameLib.Vector2( @@ -65,12 +62,6 @@ GameLib.D3.Renderer = function ( this ); - if (this.canvas instanceof GameLib.API.Canvas) { - this.canvas = new GameLib.Canvas( - this.canvas - ); - } - if (this.renderTarget instanceof GameLib.D3.API.RenderTarget) { this.renderTarget = new GameLib.D3.RenderTarget( this.graphics, @@ -88,44 +79,39 @@ GameLib.D3.Renderer = function ( return clippingPlane; } }.bind(this)); - + this.clearColor = new GameLib.Color( this.graphics, this.clearColor, this ); - this.viewports = this.viewports.map(function(viewport){ - if (viewport instanceof GameLib.D3.API.Viewport) { - return new GameLib.D3.Viewport( - this.graphics, - viewport - ); - } else { - return viewport; - } - }.bind(this)); - - GameLib.Component.call( - this, - { - 'canvas' : GameLib.Canvas, - 'renderTarget' : GameLib.D3.RenderTarget, - 'clippingPlanes': [GameLib.Plane], - 'viewports' : [GameLib.D3.Viewport] + this.viewports = this.viewports.map(function(viewport){ + if (viewport instanceof GameLib.D3.API.Viewport) { + return new GameLib.D3.Viewport( + this.graphics, + viewport + ); + } else { + return viewport; } + }.bind(this)); + + GameLib.Renderer.call( + this, + this ); }; -GameLib.D3.Renderer.prototype = Object.create(GameLib.Component.prototype); -GameLib.D3.Renderer.prototype.constructor = GameLib.D3.Renderer; +GameLib.Renderer.D3.prototype = Object.create(GameLib.Renderer.prototype); +GameLib.Renderer.D3.prototype.constructor = GameLib.Renderer.D3; /** - * Create Renderer Instance + * Create GameLib.Renderer.D3 Instance * @returns {*} */ -GameLib.D3.Renderer.prototype.createInstance = function() { +GameLib.Renderer.D3.prototype.createInstance = function() { if ( GameLib.Utils.UndefinedOrNull(this.canvas) || @@ -209,14 +195,14 @@ GameLib.D3.Renderer.prototype.createInstance = function() { ), 1 - this.clearColor.a ); - - GameLib.Component.prototype.createInstance.call(this); + + GameLib.Renderer.prototype.createInstance.call(this); }; /** - * Update Renderer Instance + * Update Renderer.D3 Instance */ -GameLib.D3.Renderer.prototype.updateInstance = function(property) { +GameLib.Renderer.D3.prototype.updateInstance = function(property) { if (!property) { throw new Error('no renderer property'); @@ -250,145 +236,145 @@ GameLib.D3.Renderer.prototype.updateInstance = function(property) { return; } - if (property === 'autoClear') { - this.instance.autoClear = this.autoClear; - return; - } - - if (property === 'autoClearColor') { - this.instance.autoClearColor = this.autoClearColor; - return; - } - - if (property === 'autoClearDepth') { - this.instance.autoClearDepth = this.autoClearDepth; - return; - } - - if (property === 'autoClearStencil') { - this.instance.autoClearStencil = this.autoClearStencil; - return; - } - - if (property === 'gammaFactor') { - this.instance.gammaFactor = this.gammaFactor; - return; - } - - if (property === 'gammaInput') { - this.instance.gammaInput = this.gammaInput; - return; - } - - if (property === 'gammaOutput') { - this.instance.gammaOutput = this.gammaOutput; - return; - } - - if (property === 'maxMorphTargets') { - this.instance.maxMorphTargets = this.maxMorphTargets; - return; - } - - if (property === 'maxMorphNormals') { - this.instance.maxMorphNormals = this.maxMorphNormals; - return; - } - - if (property === 'physicallyCorrectLights') { - this.instance.physicallyCorrectLights = this.physicallyCorrectLights; - return; - } - - if (property === 'shadowMapEnabled') { - this.instance.shadowMap.enabled = this.shadowMapEnabled; - return; - } - - if (property === 'shadowMapAutoUpdate') { - this.instance.shadowMap.autoUpdate = this.shadowMapAutoUpdate; - return; - } - - if (property === 'shadowMapNeedsUpdate') { - this.instance.shadowMap.needsUpdate = this.shadowMapNeedsUpdate; - return; - } - - if (property === 'shadowMapType') { - this.instance.shadowMap.type = this.shadowMapType; - return; - } - - if (property === 'shadowMapRenderReverseSided') { - this.instance.shadowMap.renderReverseSided = this.shadowMapRenderReverseSided; - return; - } - - if (property === 'shadowMapRenderSingleSided') { - this.instance.shadowMap.renderSingleSided = this.shadowMapRenderSingleSided; + if (property === 'autoClear') { + this.instance.autoClear = this.autoClear; return; - } + } - if (property === 'sortObjects') { - this.instance.sortObjects = this.sortObjects; + if (property === 'autoClearColor') { + this.instance.autoClearColor = this.autoClearColor; return; - } + } - if (property === 'toneMapping') { - this.instance.toneMapping = this.toneMapping; + if (property === 'autoClearDepth') { + this.instance.autoClearDepth = this.autoClearDepth; return; - } + } - if (property === 'toneMappingExposure') { - this.instance.toneMappingExposure = this.toneMappingExposure; + if (property === 'autoClearStencil') { + this.instance.autoClearStencil = this.autoClearStencil; return; - } + } - if (property === 'toneMappingWhitePoint') { - this.instance.toneMappingWhitePoint = this.toneMappingWhitePoint; + if (property === 'gammaFactor') { + this.instance.gammaFactor = this.gammaFactor; return; - } + } - if (property === 'premultipliedAlpha') { - this.instance.premultipliedAlpha = this.premultipliedAlpha; + if (property === 'gammaInput') { + this.instance.gammaInput = this.gammaInput; return; - } + } - if (property === 'premultipliedAlpha') { - this.instance.premultipliedAlpha = this.premultipliedAlpha; + if (property === 'gammaOutput') { + this.instance.gammaOutput = this.gammaOutput; return; - } + } - if (property === 'antialias') { - this.instance.antialias = this.antialias; + if (property === 'maxMorphTargets') { + this.instance.maxMorphTargets = this.maxMorphTargets; return; - } + } - if (property === 'stencil') { - this.instance.stencil = this.stencil; + if (property === 'maxMorphNormals') { + this.instance.maxMorphNormals = this.maxMorphNormals; return; - } + } - if (property === 'preserveDrawingBuffer') { - this.instance.preserveDrawingBuffer = this.preserveDrawingBuffer; + if (property === 'physicallyCorrectLights') { + this.instance.physicallyCorrectLights = this.physicallyCorrectLights; return; - } + } - if (property === 'depth') { - this.instance.depth = this.depth; + if (property === 'shadowMapEnabled') { + this.instance.shadowMap.enabled = this.shadowMapEnabled; return; - } + } - if (property === 'logarithmicDepthBuffer') { - this.instance.logarithmicDepthBuffer = this.logarithmicDepthBuffer; + if (property === 'shadowMapAutoUpdate') { + this.instance.shadowMap.autoUpdate = this.shadowMapAutoUpdate; return; - } + } - if (property === 'localClippingEnabled') { - this.instance.localClippingEnabled = this.localClippingEnabled; + if (property === 'shadowMapNeedsUpdate') { + this.instance.shadowMap.needsUpdate = this.shadowMapNeedsUpdate; return; - } + } + + if (property === 'shadowMapType') { + this.instance.shadowMap.type = this.shadowMapType; + return; + } + + if (property === 'shadowMapRenderReverseSided') { + this.instance.shadowMap.renderReverseSided = this.shadowMapRenderReverseSided; + return; + } + + if (property === 'shadowMapRenderSingleSided') { + this.instance.shadowMap.renderSingleSided = this.shadowMapRenderSingleSided; + return; + } + + if (property === 'sortObjects') { + this.instance.sortObjects = this.sortObjects; + return; + } + + if (property === 'toneMapping') { + this.instance.toneMapping = this.toneMapping; + return; + } + + if (property === 'toneMappingExposure') { + this.instance.toneMappingExposure = this.toneMappingExposure; + return; + } + + if (property === 'toneMappingWhitePoint') { + this.instance.toneMappingWhitePoint = this.toneMappingWhitePoint; + return; + } + + if (property === 'premultipliedAlpha') { + this.instance.premultipliedAlpha = this.premultipliedAlpha; + return; + } + + if (property === 'premultipliedAlpha') { + this.instance.premultipliedAlpha = this.premultipliedAlpha; + return; + } + + if (property === 'antialias') { + this.instance.antialias = this.antialias; + return; + } + + if (property === 'stencil') { + this.instance.stencil = this.stencil; + return; + } + + if (property === 'preserveDrawingBuffer') { + this.instance.preserveDrawingBuffer = this.preserveDrawingBuffer; + return; + } + + if (property === 'depth') { + this.instance.depth = this.depth; + return; + } + + if (property === 'logarithmicDepthBuffer') { + this.instance.logarithmicDepthBuffer = this.logarithmicDepthBuffer; + return; + } + + if (property === 'localClippingEnabled') { + this.instance.localClippingEnabled = this.localClippingEnabled; + return; + } if (property === 'canvas') { @@ -438,13 +424,13 @@ GameLib.D3.Renderer.prototype.updateInstance = function(property) { console.warn('todo: viewports change'); } - GameLib.Component.prototype.updateInstance.call(this, property); + GameLib.Renderer.prototype.updateInstance.call(this, property); }; /** * Wrapper for clear() */ -GameLib.D3.Renderer.prototype.clear = function() { +GameLib.Renderer.D3.prototype.clear = function() { return this.instance.clear(); }; @@ -453,7 +439,7 @@ GameLib.D3.Renderer.prototype.clear = function() { * @param width * @param height */ -GameLib.D3.Renderer.prototype.setSize = function(width, height) { +GameLib.Renderer.D3.prototype.setSize = function(width, height) { this.instance.setSize( this.width * width, @@ -469,7 +455,7 @@ GameLib.D3.Renderer.prototype.setSize = function(width, height) { * Convenience function to get size * @returns {{width, height}} */ -GameLib.D3.Renderer.prototype.getSize = function() { +GameLib.Renderer.D3.prototype.getSize = function() { return this.instance.getSize(); }; @@ -480,7 +466,7 @@ GameLib.D3.Renderer.prototype.getSize = function() { * @param width * @param height */ -GameLib.D3.Renderer.prototype.setViewport = function( +GameLib.Renderer.D3.prototype.setViewport = function( x, y, width, @@ -499,7 +485,7 @@ GameLib.D3.Renderer.prototype.setViewport = function( * @param scene * @param camera */ -GameLib.D3.Renderer.prototype.renderToTarget = function(scene, camera) { +GameLib.Renderer.D3.prototype.renderToTarget = function(scene, camera) { this.instance.render( scene.instance, @@ -514,7 +500,7 @@ GameLib.D3.Renderer.prototype.renderToTarget = function(scene, camera) { * @param scene * @param camera */ -GameLib.D3.Renderer.prototype.render = function(scene, camera) { +GameLib.Renderer.D3.prototype.render = function(scene, camera) { this.instance.render( scene.instance, camera.instance @@ -524,15 +510,14 @@ GameLib.D3.Renderer.prototype.render = function(scene, camera) { /** * - * @returns {GameLib.D3.API.Renderer} + * @returns {GameLib.API.Renderer.D3} */ -GameLib.D3.Renderer.prototype.toApiObject = function() { +GameLib.Renderer.D3.prototype.toApiObject = function() { - var apiRenderer = new GameLib.D3.API.Renderer( - this.id, - this.name, - this.width, - this.height, + var apiRenderer = GameLib.Renderer.prototype.toApiObject.call(this); + + var apiRendererD3 = new GameLib.API.Renderer.D3( + apiRenderer, this.renderMode, this.autoClear, this.autoClearColor, @@ -562,7 +547,6 @@ GameLib.D3.Renderer.prototype.toApiObject = function() { this.logarithmicDepthBuffer, this.localClippingEnabled, this.offset.toApiObject(), - GameLib.Utils.IdOrNull(this.canvas), GameLib.Utils.IdOrNull(this.renderTarget), this.clippingPlanes.map( function(clippingPlane){ @@ -574,9 +558,8 @@ GameLib.D3.Renderer.prototype.toApiObject = function() { function(viewport){ return GameLib.Utils.IdOrNull(viewport); } - ), - GameLib.Utils.IdOrNull(this.parentEntity) + ) ); - return apiRenderer; + return apiRendererD3; }; diff --git a/src/game-lib-system-gui.js b/src/game-lib-system-gui.js index 6af4de5..191224b 100644 --- a/src/game-lib-system-gui.js +++ b/src/game-lib-system-gui.js @@ -994,9 +994,9 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate, object, property, { - 'canvas': GameLib.D3.API.Renderer.MODE_CANVAS, - 'target': GameLib.D3.API.Renderer.MODE_TARGET, - 'canvas and target': GameLib.D3.API.Renderer.MODE_CANVAS_AND_TARGET + 'canvas': GameLib.API.Renderer.MODE_CANVAS, + 'target': GameLib.API.Renderer.MODE_TARGET, + 'canvas and target': GameLib.API.Renderer.MODE_CANVAS_AND_TARGET } ) ); @@ -1029,9 +1029,9 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate, object, property, { - 'basic': GameLib.D3.API.Renderer.SHADOW_MAP_TYPE_BASIC, - 'pcf': GameLib.D3.API.Renderer.SHADOW_MAP_TYPE_PCF, - 'pcf soft': GameLib.D3.API.Renderer.SHADOW_MAP_TYPE_PCF_SOFT + 'basic': GameLib.API.Renderer.SHADOW_MAP_TYPE_BASIC, + 'pcf': GameLib.API.Renderer.SHADOW_MAP_TYPE_PCF, + 'pcf soft': GameLib.API.Renderer.SHADOW_MAP_TYPE_PCF_SOFT } ) ); @@ -1041,10 +1041,10 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate, object, property, { - 'linear': GameLib.D3.API.Renderer.TONE_MAPPING_LINEAR, - 'reinhard': GameLib.D3.API.Renderer.TONE_MAPPING_REINHARD, - 'uncharted 2': GameLib.D3.API.Renderer.TONE_MAPPING_UNCHARTED_2, - 'cineon': GameLib.D3.API.Renderer.TONE_MAPPING_CINEON + 'linear': GameLib.API.Renderer.TONE_MAPPING_LINEAR, + 'reinhard': GameLib.API.Renderer.TONE_MAPPING_REINHARD, + 'uncharted 2': GameLib.API.Renderer.TONE_MAPPING_UNCHARTED_2, + 'cineon': GameLib.API.Renderer.TONE_MAPPING_CINEON } ) ); @@ -1195,6 +1195,17 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate, } ) ); + } else if (property === 'rendererType') { + controllers.push( + folder.add( + object, + property, + { + '2D': GameLib.API.Renderer.RENDERER_TYPE_2D, + '3D': GameLib.API.Renderer.RENDERER_TYPE_3D + } + ) + ); } else if (property === 'materialType') { controllers.push( folder.add( @@ -1456,12 +1467,12 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate, object, property, { - 'none': GameLib.D3.API.Renderer.ASPECT_RATIO_NONE, - '4:3 (1.3333)': GameLib.D3.API.Renderer.ASPECT_RATIO_4_3, - '3:2 (1.5)': GameLib.D3.API.Renderer.ASPECT_RATIO_3_2, - '16:10 (1.6667)': GameLib.D3.API.Renderer.ASPECT_RATIO_16_10, - '17:10 (1.7)': GameLib.D3.API.Renderer.ASPECT_RATIO_17_10, - '16:9 (1.7778)': GameLib.D3.API.Renderer.ASPECT_RATIO_16_9 + 'none': GameLib.API.Renderer.ASPECT_RATIO_NONE, + '4:3 (1.3333)': GameLib.API.Renderer.ASPECT_RATIO_4_3, + '3:2 (1.5)': GameLib.API.Renderer.ASPECT_RATIO_3_2, + '16:10 (1.6667)': GameLib.API.Renderer.ASPECT_RATIO_16_10, + '17:10 (1.7)': GameLib.API.Renderer.ASPECT_RATIO_17_10, + '16:9 (1.7778)': GameLib.API.Renderer.ASPECT_RATIO_16_9 } ) ); @@ -1471,10 +1482,10 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate, object, property, { - 'none': GameLib.D3.API.Renderer.SCALE_MODE_NONE, - 'letterbox': GameLib.D3.API.Renderer.SCALE_MODE_LETTERBOX, - 'zoom-bigger': GameLib.D3.API.Renderer.SCALE_MODE_ZOOM_TO_BIGGER, - 'non-uniform': GameLib.D3.API.Renderer.SCALE_MODE_NON_UNIFORM + 'none': GameLib.API.Renderer.SCALE_MODE_NONE, + 'letterbox': GameLib.API.Renderer.SCALE_MODE_LETTERBOX, + 'zoom-bigger': GameLib.API.Renderer.SCALE_MODE_ZOOM_TO_BIGGER, + 'non-uniform': GameLib.API.Renderer.SCALE_MODE_NON_UNIFORM } ) ); diff --git a/src/game-lib-system-linking.js b/src/game-lib-system-linking.js index 6f3a58f..ae9ea5f 100644 --- a/src/game-lib-system-linking.js +++ b/src/game-lib-system-linking.js @@ -31,6 +31,7 @@ GameLib.System.Linking = function( this.componentClonedSubscription = null; this.registerDependenciesSubscription = null; this.componentRemoveSubscription = null; + this.resolveDependenciesSubscription = null; /** * Parents @@ -96,6 +97,11 @@ GameLib.System.Linking.prototype.start = function() { this.removeComponent ); + this.resolveDependenciesSubscription = this.subscribe( + GameLib.Event.RESOLVE_DEPENDENCIES, + this.resolveDependencies + ); + /** * Parents */ @@ -196,7 +202,9 @@ GameLib.System.Linking.prototype.link = function(component, data) { } }; -GameLib.System.Linking.prototype.resolveDependencies = function(component) { +GameLib.System.Linking.prototype.resolveDependencies = function(data) { + + var component = data.component; if (!component.loaded) { /** @@ -336,34 +344,6 @@ GameLib.System.Linking.prototype.resolveDependencies = function(component) { this.resolved = []; } - //else { - - // var keys = Object.keys(this.dependencies); - - /** - * And this is it - we need to check if the dependencies array contains any 'resolved' components - - * If it does - resolve the dependencies of this newly 'resolved' component - */ - // this.resolved = this.resolved.reduce( - // - // function(result, component) { - // - // if (keys.indexOf(component.id) !== -1) { - // /** - // * We found a resolved component - which is a dependency for another component. - // * Resolve the dependencies of this component - this is recursive and should be done carefully - // */ - // this.resolveDependencies(component); - // } else { - // result.push(component); - // } - // - // return result; - // - // }.bind(this), - // [] - // ); - //} }; @@ -453,7 +433,7 @@ GameLib.System.Linking.prototype.componentCreated = function(data) { /** * Resolve any dependencies to this component */ - this.resolveDependencies(component); + this.resolveDependencies({component : component}); }; @@ -579,8 +559,6 @@ GameLib.System.Linking.prototype.instanceCloned = function(data) { GameLib.System.Linking.prototype.instanceCreated = function(data) { - this.resolveDependencies(data.component); - if (data.component instanceof GameLib.Image) { /** * Find all textures which use this image @@ -883,6 +861,7 @@ GameLib.System.Linking.prototype.stop = function() { this.componentClonedSubscription.remove(); this.registerDependenciesSubscription.remove(); this.componentRemoveSubscription.remove(); + this.resolveDependenciesSubscription.remove(); /** * Parents diff --git a/src/game-lib-system-render.js b/src/game-lib-system-render.js index cc3b02d..a5c4d48 100644 --- a/src/game-lib-system-render.js +++ b/src/game-lib-system-render.js @@ -350,7 +350,7 @@ GameLib.System.Render.prototype.instanceCreated = function(data) { } } - if (data.component instanceof GameLib.D3.Renderer) { + if (data.component instanceof GameLib.Renderer) { console.log('adding renderer to render system'); this.renderers.push(data.component); } @@ -477,6 +477,15 @@ GameLib.System.Render.prototype.replaceComponent = function(data) { } ); } + + if ( + data.current instanceof GameLib.Renderer && + data.replacement instanceof GameLib.Renderer + ) { + data.replacement.canvas.remove(); + data.replacement.canvas = data.current.canvas; + data.current.canvas = null; + } }; /** @@ -509,7 +518,7 @@ GameLib.System.Render.prototype.removeComponent = function(data) { } } - if (data.component instanceof GameLib.D3.Renderer) { + if (data.component instanceof GameLib.Renderer) { index = this.renderers.indexOf(data.component); @@ -600,6 +609,10 @@ GameLib.System.Render.prototype.render = function(data) { var renderer = configuration.activeRenderer; + if (renderer instanceof GameLib.Renderer.D2) { + return; + } + var scenes = configuration.activeScenes; var camera = configuration.activeCamera; @@ -625,8 +638,8 @@ GameLib.System.Render.prototype.render = function(data) { } if ( - renderer.renderMode === GameLib.D3.API.Renderer.MODE_TARGET || - renderer.renderMode === GameLib.D3.API.Renderer.MODE_CANVAS_AND_TARGET + renderer.renderMode === GameLib.API.Renderer.MODE_TARGET || + renderer.renderMode === GameLib.API.Renderer.MODE_CANVAS_AND_TARGET ) { if (!renderer.renderTarget) { console.warn('no render renderTarget'); @@ -685,8 +698,8 @@ GameLib.System.Render.prototype.render = function(data) { function (scene) { - if (renderer.renderMode === GameLib.D3.API.Renderer.MODE_TARGET || - renderer.renderMode === GameLib.D3.API.Renderer.MODE_CANVAS_AND_TARGET) { + if (renderer.renderMode === GameLib.API.Renderer.MODE_TARGET || + renderer.renderMode === GameLib.API.Renderer.MODE_CANVAS_AND_TARGET) { renderer.renderToTarget( scene, @@ -695,8 +708,8 @@ GameLib.System.Render.prototype.render = function(data) { } - if (renderer.renderMode === GameLib.D3.API.Renderer.MODE_CANVAS || - renderer.renderMode === GameLib.D3.API.Renderer.MODE_CANVAS_AND_TARGET) { + if (renderer.renderMode === GameLib.API.Renderer.MODE_CANVAS || + renderer.renderMode === GameLib.API.Renderer.MODE_CANVAS_AND_TARGET) { if (configuration.enableEffect) { effect.render(scene, camera);