var webglEnabled = requrire('webgl-enabled')();
/**
* @namespace PIXI
*/
var utils = module.exports = {
/**
* Converts a hex color number to an [R, G, B] array
*
* @param hex {number}
* @return {number[]} An array representing the [R, G, B] of the color.
*/
hex2rgb: function (hex) {
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
},
/**
* Converts a color as an [R, G, B] array to a hex number
*
* @param rgb {number[]}
* @return {number} The color number
*/
rgb2hex: function (rgb) {
return ((rgb[0]*255 << 16) + (rgb[1]*255 << 8) + rgb[2]*255);
},
/**
* Checks whether the Canvas BlendModes are supported by the current browser
*
* @return {boolean} whether they are supported
*/
canUseNewCanvasBlendModes: function () {
if (typeof document === 'undefined') {
return false;
}
var canvas = document.createElement('canvas'),
context = canvas.getContext('2d');
canvas.width = 1;
canvas.height = 1;
context.fillStyle = '#000';
context.fillRect(0, 0, 1, 1);
context.globalCompositeOperation = 'multiply';
context.fillStyle = '#fff';
context.fillRect(0, 0, 1, 1);
return context.getImageData(0,0,1,1).data[0] === 0;
},
/**
* Given a number, this function returns the closest number that is a power of two
* this function is taken from Starling Framework as its pretty neat ;)
*
* @param number {number}
* @return {number} the closest number that is a power of two
*/
getNextPowerOfTwo: function (number) {
// see: http://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two
if (number > 0 && (number & (number - 1)) === 0) {
return number;
}
else {
var result = 1;
while (result < number) {
result <<= 1;
}
return result;
}
},
/**
* checks if the given width and height make a power of two rectangle
*
* @param width {number}
* @param height {number}
* @return {boolean}
*/
isPowerOfTwo: function (width, height) {
return (width > 0 && (width & (width - 1)) === 0 && height > 0 && (height & (height - 1)) === 0);
},
/**
* This helper function will automatically detect which renderer you should be using.
* WebGL is the preferred renderer as it is a lot faster. If webGL is not supported by
* the browser then this function will return a canvas renderer
*
* @param width=800 {number} the width of the renderers view
* @param height=600 {number} the height of the renderers view
* @param [options] {object} The optional renderer parameters
* @param [options.view] {HTMLCanvasElement} the canvas to use as a view, optional
* @param [options.transparent=false] {boolean} If the render view is transparent, default false
* @param [options.antialias=false] {boolean} sets antialias (only applicable in chrome at the moment)
* @param [options.preserveDrawingBuffer=false] {boolean} enables drawing buffer preservation, enable this if you
* need to call toDataUrl on the webgl context
* @param [options.resolution=1] {number} the resolution of the renderer retina would be 2
* @return {WebGLRenderer|CanvasRenderer} Returns WebGL renderer if available, otherwise CanvasRenderer
*/
autoDetectRenderer: function (width, height, options) {
width = width || 800;
height = height || 600;
if (webglEnabled) {
return new WebGLRenderer(width, height, options);
}
return new CanvasRenderer(width, height, options);
},
PolyK: require('./PolyK'),
Event: require('./Event'),
EventTarget: require('./EventTarget')
};