starling-framework
Version:
A fast, productive library for 2D cross-platform development.
95 lines (79 loc) • 4.09 kB
JavaScript
// Class: starling.rendering.MeshEffect
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;
var $extend = require("./../../extend_stub").default;
function starling_rendering_FilterEffect() {return require("./../../starling/rendering/FilterEffect");}
function starling_rendering_Program() {return require("./../../starling/rendering/Program");}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");}
function Type() {return require("./../../Type");}
// Constructor
var MeshEffect = function() {
(starling_rendering_FilterEffect().default).call(this);
this._alpha = 1.0;
this._optimizeIfNotTinted = (Type().default).getClass(this) == MeshEffect
}
// Meta
MeshEffect.__name__ = "starling.rendering.MeshEffect";
MeshEffect.__isInterface__ = false;
MeshEffect.__super__ = (starling_rendering_FilterEffect().default);
MeshEffect.prototype = $extend((starling_rendering_FilterEffect().default).prototype, {
get_programVariantName: function() {
var noTinting = this._optimizeIfNotTinted && !this._tinted && this._alpha == 1.0 ? 1 : 0;
return (starling_rendering_FilterEffect().default).prototype.get_programVariantName.call(this) | noTinting << 3;
},
createProgram: function() {
var vertexShader;
var fragmentShader;
if(this.get_texture() != null) {
if(this._optimizeIfNotTinted && !this._tinted && this._alpha == 1.0) {
return (starling_rendering_FilterEffect().default).prototype.createProgram.call(this);
}
vertexShader = "m44 op, va0, vc0 \n" + "mov v0, va1 \n" + "mul v1, va2, vc4 \n";
fragmentShader = (starling_rendering_FilterEffect().default).tex("ft0","v0",0,this.get_texture()) + "mul oc, ft0, v1 \n";
} else {
vertexShader = "m44 op, va0, vc0 \n" + "mul v0, va2, vc4 \n";
fragmentShader = "mov oc, v0 \n";
}
return (starling_rendering_Program().default).fromSource(vertexShader,fragmentShader);
},
beforeDraw: function(context) {
(starling_rendering_FilterEffect().default).prototype.beforeDraw.call(this,context);
(openfl__$Vector_Vector_$Impl_$().default).set(MeshEffect.sRenderAlpha,0,(openfl__$Vector_Vector_$Impl_$().default).set(MeshEffect.sRenderAlpha,1,(openfl__$Vector_Vector_$Impl_$().default).set(MeshEffect.sRenderAlpha,2,(openfl__$Vector_Vector_$Impl_$().default).set(MeshEffect.sRenderAlpha,3,this._alpha))));
context.setProgramConstantsFromVector("vertex",4,MeshEffect.sRenderAlpha);
if(this._tinted || this._alpha != 1.0 || !this._optimizeIfNotTinted || this.get_texture() == null) {
this.get_vertexFormat().setVertexBufferAt(2,this.get_vertexBuffer(),"color");
}
},
afterDraw: function(context) {
context.setVertexBufferAt(2,null);
(starling_rendering_FilterEffect().default).prototype.afterDraw.call(this,context);
},
get_vertexFormat: function() {
return MeshEffect.VERTEX_FORMAT;
},
get_alpha: function() {
return this._alpha;
},
set_alpha: function(value) {
return this._alpha = value;
},
get_tinted: function() {
return this._tinted;
},
set_tinted: function(value) {
return this._tinted = value;
}
});
MeshEffect.prototype.__class__ = MeshEffect.prototype.constructor = $hxClasses["starling.rendering.MeshEffect"] = MeshEffect;
// Init
Object.defineProperties(MeshEffect.prototype,{ alpha : { get : function () { return this.get_alpha (); }, set : function (v) { return this.set_alpha (v); }}, tinted : { get : function () { return this.get_tinted (); }, set : function (v) { return this.set_tinted (v); }}});
// Statics
MeshEffect.VERTEX_FORMAT = (starling_rendering_FilterEffect().default).VERTEX_FORMAT.extend("color:bytes4")
MeshEffect.sRenderAlpha = (openfl__$Vector_Vector_$Impl_$().default)._new(4,true)
// Export
exports.default = MeshEffect;