starling-framework
Version:
A fast, productive library for 2D cross-platform development.
228 lines (212 loc) • 8.33 kB
JavaScript
// Class: starling.rendering.Effect
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 $bind = require("./../../bind_stub").default;
function starling_core_Starling() {return require("./../../starling/core/Starling");}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function Std() {return require("./../../Std");}
function starling_errors_MissingContextError() {return require("./../../starling/errors/MissingContextError");}
function starling_rendering_Program() {return require("./../../starling/rendering/Program");}
function haxe_ds_IntMap() {return require("./../../haxe/ds/IntMap");}
function StringTools() {return require("./../../StringTools");}
function starling_rendering_VertexDataFormat() {return require("./../../starling/rendering/VertexDataFormat");}
function haxe_ds_StringMap() {return require("./../../haxe/ds/StringMap");}
function openfl_geom_Matrix3D() {return $import(require("openfl/geom/Matrix3D"));}
function Type() {return require("./../../Type");}
// Constructor
var Effect = function() {
this._mvpMatrix3D = new (openfl_geom_Matrix3D().default)();
this._programBaseName = (Type().default).getClassName((Type().default).getClass(this));
(starling_core_Starling().default).get_current().get_stage3D().addEventListener("context3DCreate",$bind(this,this.onContextCreated),false,20,true);
}
// Meta
Effect.__name__ = "starling.rendering.Effect";
Effect.__isInterface__ = false;
Effect.prototype = {
dispose: function() {
(starling_core_Starling().default).get_current().get_stage3D().removeEventListener("context3DCreate",$bind(this,this.onContextCreated));
this.purgeBuffers();
},
onContextCreated: function(event) {
this.purgeBuffers();
if(this._onRestore != null) {
this._onRestore(this);
}
},
purgeBuffers: function(vertexBuffer,indexBuffer) {
if(indexBuffer == null) {
indexBuffer = true;
}
if(vertexBuffer == null) {
vertexBuffer = true;
}
if(this._vertexBuffer != null && vertexBuffer) {
try {
this._vertexBuffer.dispose();
} catch( e ) {
var e1 = ((e) instanceof (js__$Boot_HaxeError().default)) ? e.val : e;
}
this._vertexBuffer = null;
}
if(this._indexBuffer != null && indexBuffer) {
try {
this._indexBuffer.dispose();
} catch( e2 ) {
var e3 = ((e2) instanceof (js__$Boot_HaxeError().default)) ? e2.val : e2;
}
this._indexBuffer = null;
}
},
uploadIndexData: function(indexData,bufferUsage) {
if(bufferUsage == null) {
bufferUsage = "staticDraw";
}
var numIndices = indexData.get_numIndices();
var isQuadLayout = indexData.get_useQuadLayout();
var wasQuadLayout = this._indexBufferUsesQuadLayout;
if(this._indexBuffer != null) {
if(numIndices <= this._indexBufferSize) {
if(!isQuadLayout || !wasQuadLayout) {
indexData.uploadToIndexBuffer(this._indexBuffer);
this._indexBufferUsesQuadLayout = isQuadLayout && numIndices == this._indexBufferSize;
}
} else {
this.purgeBuffers(false,true);
}
}
if(this._indexBuffer == null) {
this._indexBuffer = indexData.createIndexBuffer(true,bufferUsage);
this._indexBufferSize = numIndices;
this._indexBufferUsesQuadLayout = isQuadLayout;
}
},
uploadVertexData: function(vertexData,bufferUsage) {
if(bufferUsage == null) {
bufferUsage = "staticDraw";
}
if(this._vertexBuffer != null) {
if(vertexData.get_size() <= this._vertexBufferSize) {
vertexData.uploadToVertexBuffer(this._vertexBuffer);
} else {
this.purgeBuffers(true,false);
}
}
if(this._vertexBuffer == null) {
this._vertexBuffer = vertexData.createVertexBuffer(true,bufferUsage);
this._vertexBufferSize = vertexData.get_size();
}
},
render: function(firstIndex,numTriangles) {
if(numTriangles == null) {
numTriangles = -1;
}
if(firstIndex == null) {
firstIndex = 0;
}
if(numTriangles < 0) {
numTriangles = (Std().default).int(this._indexBufferSize / 3);
}
if(numTriangles == 0) {
return;
}
var context = (starling_core_Starling().default).get_current().get_context();
if(context == null) {
throw new (js__$Boot_HaxeError().default)(new (starling_errors_MissingContextError().default)());
}
this.beforeDraw(context);
context.drawTriangles(this.get_indexBuffer(),firstIndex,numTriangles);
this.afterDraw(context);
},
beforeDraw: function(context) {
this.get_program().activate(context);
this.get_vertexFormat().setVertexBufferAt(0,this.get_vertexBuffer(),"position");
context.setProgramConstantsFromMatrix("vertex",0,this.get_mvpMatrix3D(),true);
},
afterDraw: function(context) {
context.setVertexBufferAt(0,null);
},
createProgram: function() {
var vertexShader = ["m44 op, va0, vc0","sge v0, va0, va0"].join("\n");
var fragmentShader = "mov oc, v0";
return (starling_rendering_Program().default).fromSource(vertexShader,fragmentShader);
},
get_programVariantName: function() {
return 0;
},
get_programBaseName: function() {
return this._programBaseName;
},
set_programBaseName: function(value) {
return this._programBaseName = value;
},
get_programName: function() {
var baseName = this.get_programBaseName();
var variantName = this.get_programVariantName();
var nameCache = Effect.sProgramNameCache.get(baseName);
if(nameCache == null) {
nameCache = new (haxe_ds_IntMap().default)();
Effect.sProgramNameCache.set(baseName,nameCache);
}
var name = nameCache.get(variantName);
if(name == null) {
if(variantName != 0) {
name = baseName + "#" + (StringTools().default).hex(variantName);
} else {
name = baseName;
}
nameCache.set(variantName,name);
}
return name;
},
get_program: function() {
var name = this.get_programName();
var painter = (starling_core_Starling().default).get_current().get_painter();
var program = painter.getProgram(name);
if(program == null) {
program = this.createProgram();
painter.registerProgram(name,program);
}
return program;
},
get_onRestore: function() {
return this._onRestore;
},
set_onRestore: function(value) {
return this._onRestore = value;
},
get_vertexFormat: function() {
return Effect.VERTEX_FORMAT;
},
get_mvpMatrix3D: function() {
return this._mvpMatrix3D;
},
set_mvpMatrix3D: function(value) {
this._mvpMatrix3D.copyFrom(value);
return value;
},
get_indexBuffer: function() {
return this._indexBuffer;
},
get_indexBufferSize: function() {
return this._indexBufferSize;
},
get_vertexBuffer: function() {
return this._vertexBuffer;
},
get_vertexBufferSize: function() {
return this._vertexBufferSize;
}
};
Effect.prototype.__class__ = Effect.prototype.constructor = $hxClasses["starling.rendering.Effect"] = Effect;
// Init
Object.defineProperties(Effect.prototype,{ programVariantName : { get : function () { return this.get_programVariantName (); }}, programBaseName : { get : function () { return this.get_programBaseName (); }, set : function (v) { return this.set_programBaseName (v); }}, programName : { get : function () { return this.get_programName (); }}, program : { get : function () { return this.get_program (); }}, onRestore : { get : function () { return this.get_onRestore (); }, set : function (v) { return this.set_onRestore (v); }}, vertexFormat : { get : function () { return this.get_vertexFormat (); }}, mvpMatrix3D : { get : function () { return this.get_mvpMatrix3D (); }, set : function (v) { return this.set_mvpMatrix3D (v); }}, indexBuffer : { get : function () { return this.get_indexBuffer (); }}, indexBufferSize : { get : function () { return this.get_indexBufferSize (); }}, vertexBuffer : { get : function () { return this.get_vertexBuffer (); }}, vertexBufferSize : { get : function () { return this.get_vertexBufferSize (); }}});
// Statics
Effect.VERTEX_FORMAT = (starling_rendering_VertexDataFormat().default).fromString("position:float2")
Effect.sProgramNameCache = new (haxe_ds_StringMap().default)()
// Export
exports.default = Effect;