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

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