starling-framework
Version:
A fast, productive library for 2D cross-platform development.
309 lines (293 loc) • 12.7 kB
JavaScript
// Class: starling.rendering.RenderState
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
function starling_utils_RectangleUtil() {return require("./../../starling/utils/RectangleUtil");}
function openfl_geom_Matrix() {return $import(require("openfl/geom/Matrix"));}
function openfl_geom_Matrix3D() {return $import(require("openfl/geom/Matrix3D"));}
function starling_utils_MatrixUtil() {return require("./../../starling/utils/MatrixUtil");}
function starling_utils_Pool() {return require("./../../starling/utils/Pool");}
function Std() {return require("./../../Std");}
function starling_utils_MathUtil() {return require("./../../starling/utils/MathUtil");}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function openfl_errors_ArgumentError() {return $import(require("openfl/errors/ArgumentError"));}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");}
// Constructor
var RenderState = function() {
this._miscOptions = 0;
this.reset();
}
// Meta
RenderState.__name__ = "starling.rendering.RenderState";
RenderState.__isInterface__ = false;
RenderState.prototype = {
copyFrom: function(renderState) {
if(this._onDrawRequired != null) {
var currentTarget = this._renderTarget != null ? this._renderTarget.get_base() : null;
var nextTarget = renderState._renderTarget != null ? renderState._renderTarget.get_base() : null;
var cullingChanges = (this._miscOptions & 3840) != (renderState._miscOptions & 3840);
var clipRectChanges = (this._clipRect != null || renderState._clipRect != null) && !(starling_utils_RectangleUtil().default).compare(this._clipRect,renderState._clipRect);
if(this._blendMode != renderState._blendMode || currentTarget != nextTarget || clipRectChanges || cullingChanges) {
this._onDrawRequired();
}
}
this._alpha = renderState._alpha;
this._blendMode = renderState._blendMode;
this._renderTarget = renderState._renderTarget;
this._miscOptions = renderState._miscOptions;
this._modelviewMatrix.copyFrom(renderState._modelviewMatrix);
if(this._projectionMatrix3DRev != renderState._projectionMatrix3DRev) {
this._projectionMatrix3DRev = renderState._projectionMatrix3DRev;
this._projectionMatrix3D.copyFrom(renderState._projectionMatrix3D);
}
if(this._modelviewMatrix3D != null || renderState._modelviewMatrix3D != null) {
this.set_modelviewMatrix3D(renderState._modelviewMatrix3D);
}
if(this._clipRect != null || renderState._clipRect != null) {
this.set_clipRect(renderState._clipRect);
}
},
reset: function() {
this.set_alpha(1.0);
this.set_blendMode("normal");
this.set_culling("none");
this.set_depthMask(false);
this.set_depthTest("always");
this.set_modelviewMatrix3D(null);
this.set_renderTarget(null);
this.set_clipRect(null);
this._projectionMatrix3DRev = 0;
if(this._modelviewMatrix != null) {
this._modelviewMatrix.identity();
} else {
this._modelviewMatrix = new (openfl_geom_Matrix().default)();
}
if(this._projectionMatrix3D != null) {
this._projectionMatrix3D.identity();
} else {
this._projectionMatrix3D = new (openfl_geom_Matrix3D().default)();
}
if(this._mvpMatrix3D == null) {
this._mvpMatrix3D = new (openfl_geom_Matrix3D().default)();
}
},
transformModelviewMatrix: function(matrix) {
(starling_utils_MatrixUtil().default).prependMatrix(this._modelviewMatrix,matrix);
},
transformModelviewMatrix3D: function(matrix) {
if(this._modelviewMatrix3D == null) {
this._modelviewMatrix3D = (starling_utils_Pool().default).getMatrix3D();
}
this._modelviewMatrix3D.prepend((starling_utils_MatrixUtil().default).convertTo3D(this._modelviewMatrix,RenderState.sMatrix3D));
this._modelviewMatrix3D.prepend(matrix);
this._modelviewMatrix.identity();
},
setProjectionMatrix: function(x,y,width,height,stageWidth,stageHeight,cameraPos) {
if(stageHeight == null) {
stageHeight = 0;
}
if(stageWidth == null) {
stageWidth = 0;
}
this._projectionMatrix3DRev = ++RenderState.sProjectionMatrix3DRev;
(starling_utils_MatrixUtil().default).createPerspectiveProjectionMatrix(x,y,width,height,stageWidth,stageHeight,cameraPos,this._projectionMatrix3D);
},
setProjectionMatrixChanged: function() {
this._projectionMatrix3DRev = ++RenderState.sProjectionMatrix3DRev;
},
setModelviewMatricesToIdentity: function() {
this._modelviewMatrix.identity();
if(this._modelviewMatrix3D != null) {
this._modelviewMatrix3D.identity();
}
},
get_modelviewMatrix: function() {
return this._modelviewMatrix;
},
set_modelviewMatrix: function(value) {
this._modelviewMatrix.copyFrom(value);
return value;
},
get_modelviewMatrix3D: function() {
return this._modelviewMatrix3D;
},
set_modelviewMatrix3D: function(value) {
if(value != null) {
if(this._modelviewMatrix3D == null) {
this._modelviewMatrix3D = (starling_utils_Pool().default).getMatrix3D(false);
}
this._modelviewMatrix3D.copyFrom(value);
} else if(this._modelviewMatrix3D != null) {
(starling_utils_Pool().default).putMatrix3D(this._modelviewMatrix3D);
this._modelviewMatrix3D = null;
}
return value;
},
get_projectionMatrix3D: function() {
return this._projectionMatrix3D;
},
set_projectionMatrix3D: function(value) {
this.setProjectionMatrixChanged();
this._projectionMatrix3D.copyFrom(value);
return value;
},
get_mvpMatrix3D: function() {
this._mvpMatrix3D.copyFrom(this._projectionMatrix3D);
if(this._modelviewMatrix3D != null) {
this._mvpMatrix3D.prepend(this._modelviewMatrix3D);
}
this._mvpMatrix3D.prepend((starling_utils_MatrixUtil().default).convertTo3D(this._modelviewMatrix,RenderState.sMatrix3D));
return this._mvpMatrix3D;
},
setRenderTarget: function(target,enableDepthAndStencil,antiAlias) {
if(antiAlias == null) {
antiAlias = 0;
}
if(enableDepthAndStencil == null) {
enableDepthAndStencil = true;
}
var currentTarget = this._renderTarget != null ? this._renderTarget.get_base() : null;
var newTarget = target != null ? target.get_base() : null;
var newOptions = (Std().default).int((starling_utils_MathUtil().default).min(antiAlias,15)) | (enableDepthAndStencil ? 1 : 0) << 4;
var optionsChange = newOptions != (this._miscOptions & 255);
if(currentTarget != newTarget || optionsChange) {
if(this._onDrawRequired != null) {
this._onDrawRequired();
}
this._renderTarget = target;
this._miscOptions = this._miscOptions & -256 | newOptions;
}
},
get_alpha: function() {
return this._alpha;
},
set_alpha: function(value) {
return this._alpha = value;
},
get_blendMode: function() {
return this._blendMode;
},
set_blendMode: function(value) {
if(value != "auto" && this._blendMode != value) {
if(this._onDrawRequired != null) {
this._onDrawRequired();
}
this._blendMode = value;
}
return value;
},
get_renderTarget: function() {
return this._renderTarget;
},
set_renderTarget: function(value) {
this.setRenderTarget(value);
return value;
},
get_renderTargetBase: function() {
if(this._renderTarget != null) {
return this._renderTarget.get_base();
} else {
return null;
}
},
get_renderTargetOptions: function() {
return this._miscOptions & 255;
},
get_culling: function() {
var index = (this._miscOptions & 3840) >>> 8;
return RenderState.CULLING_VALUES[index];
},
set_culling: function(value) {
if(this.get_culling() != value) {
if(this._onDrawRequired != null) {
this._onDrawRequired();
}
var this1 = RenderState.CULLING_VALUES;
var index = (Array.prototype.indexOf.call)(this1,value,0);
if(index == -1) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Invalid culling mode"));
}
this._miscOptions = this._miscOptions & -3841 | index << 8;
}
return value;
},
get_depthMask: function() {
return (this._miscOptions & 61440) != 0;
},
set_depthMask: function(value) {
if(this.get_depthMask() != value) {
if(this._onDrawRequired != null) {
this._onDrawRequired();
}
this._miscOptions = this._miscOptions & -61441 | (value ? 1 : 0) << 12;
}
return value;
},
get_depthTest: function() {
var index = (this._miscOptions & 983040) >>> 16;
return RenderState.COMPARE_VALUES[index];
},
set_depthTest: function(value) {
if(this.get_depthTest() != value) {
if(this._onDrawRequired != null) {
this._onDrawRequired();
}
var this1 = RenderState.COMPARE_VALUES;
var index = (Array.prototype.indexOf.call)(this1,value,0);
if(index == -1) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Invalid compare mode"));
}
this._miscOptions = this._miscOptions & -983041 | index << 16;
}
return value;
},
get_clipRect: function() {
return this._clipRect;
},
set_clipRect: function(value) {
if(!(starling_utils_RectangleUtil().default).compare(this._clipRect,value)) {
if(this._onDrawRequired != null) {
this._onDrawRequired();
}
if(value != null) {
if(this._clipRect == null) {
this._clipRect = (starling_utils_Pool().default).getRectangle();
}
this._clipRect.copyFrom(value);
} else if(this._clipRect != null) {
(starling_utils_Pool().default).putRectangle(this._clipRect);
this._clipRect = null;
}
}
return value;
},
get_renderTargetAntiAlias: function() {
return this._miscOptions & 15;
},
get_renderTargetSupportsDepthAndStencil: function() {
return (this._miscOptions & 240) != 0;
},
get_is3D: function() {
return this._modelviewMatrix3D != null;
},
get_onDrawRequired: function() {
return this._onDrawRequired;
},
set_onDrawRequired: function(value) {
return this._onDrawRequired = value;
}
};
RenderState.prototype.__class__ = RenderState.prototype.constructor = $hxClasses["starling.rendering.RenderState"] = RenderState;
// Init
Object.defineProperties(RenderState.prototype,{ modelviewMatrix : { get : function () { return this.get_modelviewMatrix (); }, set : function (v) { return this.set_modelviewMatrix (v); }}, modelviewMatrix3D : { get : function () { return this.get_modelviewMatrix3D (); }, set : function (v) { return this.set_modelviewMatrix3D (v); }}, projectionMatrix3D : { get : function () { return this.get_projectionMatrix3D (); }, set : function (v) { return this.set_projectionMatrix3D (v); }}, mvpMatrix3D : { get : function () { return this.get_mvpMatrix3D (); }, set : function (v) { return this.set_mvpMatrix3D (v); }}, alpha : { get : function () { return this.get_alpha (); }, set : function (v) { return this.set_alpha (v); }}, blendMode : { get : function () { return this.get_blendMode (); }, set : function (v) { return this.set_blendMode (v); }}, renderTarget : { get : function () { return this.get_renderTargete (); }, set : function (v) { return this.set_renderTarget (v); }}, renderTargetBase : { get : function () { return this.get_renderTargetBase (); }}, culling : { get : function () { return this.get_culling (); }, set : function (v) { return this.set_culling (v); }}, depthMask : { get : function () { return this.get_depthMask (); }, set : function (v) { return this.set_depthMask (v); }}, depthTest : { get : function () { return this.get_depthTest (); }, set : function (v) { return this.set_depthTest (v); }}, clipRect : { get : function () { return this.get_clipRect (); }, set : function (v) { return this.set_clipRect (v); }}, renderTargetAntiAlias : { get : function () { return this.get_renderTargetAntiAlias (); }}, renderTargetSupportsDepthAndStencil : { get : function () { return this.get_renderTargetSupportsDepthAndStencil (); }}, is3D : { get : function () { return this.get_is3D (); }}, onDrawRequired : { get : function () { return this.get_onDrawRequired (); }, set : function (v) { return this.set_onDrawRequired (v); }}});
// Statics
RenderState.CULLING_VALUES = (openfl__$Vector_Vector_$Impl_$().default)._new(null,null,["none","front","back","frontAndBack"])
RenderState.COMPARE_VALUES = (openfl__$Vector_Vector_$Impl_$().default)._new(null,null,["always","never","less","lessEqual","equal","greaterEqual","greater","notEqual"])
RenderState.sMatrix3D = new (openfl_geom_Matrix3D().default)()
RenderState.sProjectionMatrix3DRev = 0
// Export
exports.default = RenderState;