UNPKG

starling-framework

Version:

A fast, productive library for 2D cross-platform development.

228 lines (212 loc) 8.33 kB
// 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;