introducing 2d renderer

beta.r3js.org
-=yb4f310 2018-02-27 20:35:23 +01:00
parent c1334bbb00
commit 34a3c1a24e
16 changed files with 679 additions and 361 deletions

View File

@ -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';

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -80,7 +80,8 @@ GameLib.Canvas.prototype.updateInstance = function(property) {
return;
}
if (property === 'autoUpdateSize' ||
if (
property === 'autoUpdateSize' ||
property === 'width' ||
property === 'height'
) {

View File

@ -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]
}

View File

@ -28,7 +28,7 @@ GameLib.D3.Effect = function(
);
var linkedObjects = {
renderer : GameLib.D3.Renderer
renderer : GameLib.Renderer
};
GameLib.Component.call(

View File

@ -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
}

125
src/game-lib-renderer-a.js Normal file
View File

@ -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;
};

View File

@ -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;
};

View File

@ -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,
@ -106,26 +97,21 @@ GameLib.D3.Renderer = function (
}
}.bind(this));
GameLib.Component.call(
GameLib.Renderer.call(
this,
{
'canvas' : GameLib.Canvas,
'renderTarget' : GameLib.D3.RenderTarget,
'clippingPlanes': [GameLib.Plane],
'viewports' : [GameLib.D3.Viewport]
}
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) ||
@ -210,13 +196,13 @@ 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');
@ -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;
};

View File

@ -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
}
)
);

View File

@ -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

View File

@ -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);