starling-framework
Version:
A fast, productive library for 2D cross-platform development.
233 lines (215 loc) • 7.1 kB
JavaScript
// Class: starling.utils.RenderUtil
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 $import = require("./../../import_stub").default;
var $bind = require("./../../bind_stub").default;
function starling_core_Starling() {return require("./../../starling/core/Starling");}
function starling_utils_Color() {return require("./../../starling/utils/Color");}
function starling_utils_SystemUtil() {return require("./../../starling/utils/SystemUtil");}
function starling_utils_Execute() {return require("./../../starling/utils/Execute");}
function Std() {return require("./../../Std");}
function js_Boot() {return require("./../../js/Boot");}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function openfl_errors_ArgumentError() {return $import(require("openfl/errors/ArgumentError"));}
function openfl_errors_Error() {return $import(require("openfl/errors/Error"));}
function haxe_Timer() {return require("./../../haxe/Timer");}
// Constructor
var RenderUtil = function() {
}
// Meta
RenderUtil.__name__ = ["starling","utils","RenderUtil"];
RenderUtil.prototype = {
};
RenderUtil.prototype.__class__ = RenderUtil.prototype.constructor = $hxClasses["starling.utils.RenderUtil"] = RenderUtil;
// Init
// Statics
RenderUtil.clear = function(rgb,alpha,depth,stencil) {
if(stencil == null) {
stencil = 0;
}
if(depth == null) {
depth = 1.0;
}
if(alpha == null) {
alpha = 0.0;
}
if(rgb == null) {
rgb = 0;
}
(starling_core_Starling().default).get_current().get_context().clear((starling_utils_Color().default).getRed(rgb) / 255.0,(starling_utils_Color().default).getGreen(rgb) / 255.0,(starling_utils_Color().default).getBlue(rgb) / 255.0,alpha,depth,stencil);
}
RenderUtil.getTextureLookupFlags = function(format,mipMapping,repeat,smoothing) {
if(smoothing == null) {
smoothing = "bilinear";
}
if(repeat == null) {
repeat = false;
}
var options = ["2d",repeat ? "repeat" : "clamp"];
if(format == "compressed") {
options.push("dxt1");
} else if(format == "compressedAlpha") {
options.push("dxt5");
}
if(smoothing == "none") {
options.push("nearest");
options.push(mipMapping ? "mipnearest" : "mipnone");
} else if(smoothing == "bilinear") {
options.push("linear");
options.push(mipMapping ? "mipnearest" : "mipnone");
} else {
options.push("linear");
options.push(mipMapping ? "miplinear" : "mipnone");
}
return "<" + options.join(",") + ">";
}
RenderUtil.getTextureVariantBits = function(texture) {
if(texture == null) {
return 0;
}
var bitField = 0;
var formatBits = 0;
var _g = texture.get_format();
switch(_g) {
case "compressed":
formatBits = 2;
break;
case "compressedAlpha":
formatBits = 3;
break;
default:
formatBits = 1;
}
bitField = bitField | formatBits;
if(!texture.get_premultipliedAlpha()) {
bitField = bitField | 4;
}
return bitField;
}
RenderUtil.setSamplerStateAt = function(sampler,mipMapping,smoothing,repeat) {
if(repeat == null) {
repeat = false;
}
if(smoothing == null) {
smoothing = "bilinear";
}
var wrap = repeat ? "repeat" : "clamp";
var filter;
var mipFilter;
if(smoothing == "none") {
filter = "nearest";
if(mipMapping) {
mipFilter = "mipnearest";
} else {
mipFilter = "mipnone";
}
} else if(smoothing == "bilinear") {
filter = "linear";
if(mipMapping) {
mipFilter = "mipnearest";
} else {
mipFilter = "mipnone";
}
} else {
filter = "linear";
if(mipMapping) {
mipFilter = "miplinear";
} else {
mipFilter = "mipnone";
}
}
(starling_core_Starling().default).get_current().get_context().setSamplerStateAt(sampler,wrap,filter,mipFilter);
}
RenderUtil.createAGALTexOperation = function(resultReg,uvReg,sampler,texture,convertToPmaIfRequired,tempReg) {
if(tempReg == null) {
tempReg = "ft0";
}
if(convertToPmaIfRequired == null) {
convertToPmaIfRequired = true;
}
var format = texture.get_format();
var formatFlag;
switch(format) {
case "compressed":
formatFlag = "dxt1";
break;
case "compressedAlpha":
formatFlag = "dxt5";
break;
default:
formatFlag = "rgba";
}
var needsConversion = convertToPmaIfRequired && !texture.get_premultipliedAlpha();
var texReg = needsConversion && resultReg == "oc" ? tempReg : resultReg;
var operation = "tex " + texReg + ", " + uvReg + ", fs" + sampler + " <2d, " + formatFlag + ">\n";
if(needsConversion) {
if(resultReg == "oc") {
operation += "mul " + texReg + ".xyz, " + texReg + ".xyz, " + texReg + ".www\n";
operation += "mov " + resultReg + ", " + texReg;
} else {
operation += "mul " + resultReg + ".xyz, " + texReg + ".xyz, " + texReg + ".www\n";
}
}
return operation;
}
RenderUtil.requestContext3D = function(stage3D,renderMode,profile) {
var profiles;
var currentProfile;
var executeFunc = (starling_utils_SystemUtil().default).get_isDesktop() ? (starling_utils_Execute().default).execute : (starling_utils_SystemUtil().default).executeWhenApplicationIsActive;
if(profile == "auto") {
profiles = ["enhanced","standardExtended","standard","standardConstrained","baselineExtended","baseline","baselineConstrained"];
} else if(typeof(profile) == "string") {
profiles = [(Std().default).string(profile)];
} else if((profile instanceof Array) && profile.__enum__ == null) {
profiles = (js_Boot().default).__cast(profile , Array);
} else {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Profile must be of type 'String' or 'Array'"));
}
var requestNextProfile = null;
var onFinished = null;
var onError = null;
var onCreated = null;
requestNextProfile = function() {
currentProfile = profiles.shift();
try {
executeFunc($bind(stage3D,stage3D.requestContext3D),[renderMode,currentProfile]);
} catch( error ) {
if (error instanceof (js__$Boot_HaxeError().default)) error = error.val;
if( (js_Boot().default).__instanceof(error,(openfl_errors_Error().default)) ) {
if(profiles.length != 0) {
(haxe_Timer().default).delay(requestNextProfile,1);
} else {
throw new (js__$Boot_HaxeError().default)(error);
}
} else throw(error);
}
};
onCreated = function(event) {
var context = stage3D.context3D;
if(renderMode == "auto" && profiles.length != 0 && context.driverInfo.indexOf("Software") != -1) {
onError(event);
} else {
onFinished();
}
};
onError = function(event1) {
if(profiles.length != 0) {
event1.stopImmediatePropagation();
(haxe_Timer().default).delay(requestNextProfile,1);
} else {
onFinished();
}
};
onFinished = function() {
stage3D.removeEventListener("context3DCreate",onCreated);
stage3D.removeEventListener("error",onError);
};
stage3D.addEventListener("context3DCreate",onCreated,false,100);
stage3D.addEventListener("error",onError,false,100);
requestNextProfile();
}
// Export
exports.default = RenderUtil;