diff --git a/.gitignore b/.gitignore index a111d56475..999db3b894 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,25 @@ Properties !_infrastructure/tests/*/*.js !_infrastructure/tests/*/*/*.js !_infrastructure/tests/*/*/*/*.js + +.idea/.name + +.idea/DefinitelyTyped.iml + +.idea/encodings.xml + +.idea/libraries/Generated_files.xml + +.idea/misc.xml + +.idea/modules.xml + +.idea/scopes/scope_settings.xml + +.idea/vcs.xml + +.idea/workspace.xml + +.idea/watcherTasks.xml + +.idea/watcherTasks.xml diff --git a/README.md b/README.md index 3f6874db82..497eff663c 100755 --- a/README.md +++ b/README.md @@ -152,6 +152,7 @@ List of Definitions * [Persona](http://www.mozilla.org/en-US/persona) (by [James Frasca](https://github.com/Nycto)) * [PhantomJS](http://phantomjs.org) (by [Jed Hunsaker](https://github.com/jedhunsaker)) * [PhoneGap](http://phonegap.com) (by [Boris Yankov](https://github.com/borisyankov)) +* [PixiJS](https://github.com/GoodBoyDigital/pixi.js) (by [Pedro Casaubon](https://github.com/xperiments)) * [Platform](https://github.com/bestiejs/platform.js) (by [Jake Hickman](https://github.com/JakeH)) * [PouchDB](http://pouchdb.com) (by [Bill Sears](https://github.com/MrBigDog2U/)) * [PreloadJS](http://www.createjs.com/#!/PreloadJS) (by [Pedro Ferreira](https://bitbucket.org/drk4)) diff --git a/pixi/pixi-tests.ts b/pixi/pixi-tests.ts new file mode 100644 index 0000000000..93ff79593a --- /dev/null +++ b/pixi/pixi-tests.ts @@ -0,0 +1,1190 @@ +/// +/// + + +var stage = new PIXI.Stage(0xFFFFFF, true); + +stage.interactive = true; + +var bg = PIXI.Sprite.fromImage("BGrotate.jpg"); +bg.anchor.x = 0.5; +bg.anchor.y = 0.5; + +bg.position.x = 620/2; +bg.position.y = 380/2; + +stage.addChild(bg); + +var container = new PIXI.DisplayObjectContainer(); +container.position.x = 620/2; +container.position.y = 380/2; + +var bgFront = PIXI.Sprite.fromImage("SceneRotate.jpg"); +bgFront.anchor.x = 0.5; +bgFront.anchor.y = 0.5; + +container.addChild(bgFront); + +var light2 = PIXI.Sprite.fromImage("LightRotate2.png"); +light2.anchor.x = 0.5; +light2.anchor.y = 0.5; +container.addChild(light2); + +var light1 = PIXI.Sprite.fromImage("LightRotate1.png"); +light1.anchor.x = 0.5; +light1.anchor.y = 0.5; +container.addChild(light1); + +var panda = PIXI.Sprite.fromImage("panda.png"); +panda.anchor.x = 0.5; +panda.anchor.y = 0.5; + +container.addChild(panda); + +stage.addChild(container); + +// create a renderer instance +var renderer = PIXI.autoDetectRenderer(620, 380); + +renderer.view.style.position = "absolute" +renderer.view.style.marginLeft = "-310px"; +renderer.view.style.marginTop = "-190px"; +renderer.view.style.top = "50%"; +renderer.view.style.left = "50%"; +renderer.view.style.display = "block"; + +// add render view to DOM +document.body.appendChild(renderer.view); + +// lets create moving shape +var thing = new PIXI.Graphics(); +stage.addChild(thing); +thing.position.x = 620/2; +thing.position.y = 380/2; +thing.lineStyle(0); + +container.mask = thing; + +var count = 0; + +stage.click = stage.tap = function() +{ + if(!container.filter) + { + container.mask = thing; + PIXI.runList(stage); + } + else + { + container.mask = null; + } +} + +/* + * Add a pixi Logo! + */ +var logo = PIXI.Sprite.fromImage("../../logo_small.png") +stage.addChild(logo); + +logo.anchor.x = 1; +logo.position.x = 620 +logo.scale.x = logo.scale.y = 0.5; +logo.position.y = 320 +logo.interactive = true; +logo.buttonMode = true; + +logo.click = logo.tap = function() +{ + window.open("https://github.com/GoodBoyDigital/pixi.js", "_blank") +} + +var help = new PIXI.Text("Click to turn masking on / off.", {font:"bold 12pt Arial", fill:"white"}); +help.position.y = 350; +help.position.x = 10; +stage.addChild(help); + +requestAnimFrame(animate); + +function animate() { + + bg.rotation += 0.01; + bgFront.rotation -= 0.01; + + light1.rotation += 0.02; + light2.rotation += 0.01; + + panda.scale.x = 1 + Math.sin(count) * 0.04; + panda.scale.y = 1 + Math.cos(count) * 0.04; + + count += 0.1; + + thing.clear(); + thing.lineStyle(5, 0x16f1ff, 1); + thing.beginFill(0x8bc5ff, 0.4); + thing.moveTo(-120 + Math.sin(count) * 20, -100 + Math.cos(count)* 20); + thing.lineTo(120 + Math.cos(count) * 20, -100 + Math.sin(count)* 20); + thing.lineTo(120 + Math.sin(count) * 20, 100 + Math.cos(count)* 20); + thing.lineTo(-120 + Math.cos(count)* 20, 100 + Math.sin(count)* 20); + thing.lineTo(-120 + Math.sin(count) * 20, -100 + Math.cos(count)* 20); + thing.rotation = count * 0.1; + + renderer.render(stage); + requestAnimFrame( animate ); +} + +/* 13 */ + +// create an new instance of a pixi stage +var stage = new PIXI.Stage(0xFFFFFF, true); + +stage.setInteractive(true); + +var sprite= PIXI.Sprite.fromImage("spinObj_02.png"); +//stage.addChild(sprite); +// create a renderer instance +// the 5the parameter is the anti aliasing +var renderer = PIXI.autoDetectRenderer(620, 380, null, false, true); + +// set the canvas width and height to fill the screen +//renderer.view.style.width = window.innerWidth + "px"; +//renderer.view.style.height = window.innerHeight + "px"; +renderer.view.style.display = "block"; + +// add render view to DOM +document.body.appendChild(renderer.view); + +var graphics = new PIXI.Graphics(); + + +// set a fill and line style +graphics.beginFill(0xFF3300); +graphics.lineStyle(10, 0xffd900, 1); + +// draw a shape +graphics.moveTo(50,50); +graphics.lineTo(250, 50); +graphics.lineTo(100, 100); +graphics.lineTo(250, 220); +graphics.lineTo(50, 220); +graphics.lineTo(50, 50); +graphics.endFill(); + +// set a fill and line style again +graphics.lineStyle(10, 0xFF0000, 0.8); +graphics.beginFill(0xFF700B, 1); + +// draw a second shape +graphics.moveTo(210,300); +graphics.lineTo(450,320); +graphics.lineTo(570,350); +graphics.lineTo(580,20); +graphics.lineTo(330,120); +graphics.lineTo(410,200); +graphics.lineTo(210,300); +graphics.endFill(); + +// draw a rectangel +graphics.lineStyle(2, 0x0000FF, 1); +graphics.drawRect(50, 250, 100, 100); + +// draw a circle +graphics.lineStyle(0); +graphics.beginFill(0xFFFF0B, 0.5); +graphics.drawCircle(470, 200,100); + +graphics.lineStyle(20, 0x33FF00); +graphics.moveTo(30,30); +graphics.lineTo(600, 300); + + +stage.addChild(graphics); + +// lets create moving shape +var thing = new PIXI.Graphics(); +stage.addChild(thing); +thing.position.x = 620/2; +thing.position.y = 380/2; + +var count = 0; + +stage.click = stage.tap = function() +{ + graphics.lineStyle(Math.random() * 30, Math.random() * 0xFFFFFF, 1); + graphics.moveTo(Math.random() * 620,Math.random() * 380); + graphics.lineTo(Math.random() * 620,Math.random() * 380); +} + +requestAnimFrame(animate); + +function animate1() { + + thing.clear(); + + count += 0.1; + + thing.clear(); + thing.lineStyle(30, 0xff0000, 1); + thing.beginFill(0xffFF00, 0.5); + + thing.moveTo(-120 + Math.sin(count) * 20, -100 + Math.cos(count)* 20); + thing.lineTo(120 + Math.cos(count) * 20, -100 + Math.sin(count)* 20); + thing.lineTo(120 + Math.sin(count) * 20, 100 + Math.cos(count)* 20); + thing.lineTo(-120 + Math.cos(count)* 20, 100 + Math.sin(count)* 20); + thing.lineTo(-120 + Math.sin(count) * 20, -100 + Math.cos(count)* 20); + + thing.rotation = count * 0.1; + renderer.render(stage); + requestAnimFrame( animate ); +} + + +// create an new instance of a pixi stage +var stage = new PIXI.Stage(0x000000); + +// create a renderer instance +var renderer = PIXI.autoDetectRenderer(800, 600); + +// set the canvas width and height to fill the screen +renderer.view.style.width = window.innerWidth + "px"; +renderer.view.style.height = window.innerHeight + "px"; +renderer.view.style.display = "block"; + +// add render view to DOM +document.body.appendChild(renderer.view); + +// OOH! SHINY! +// create two render textures.. these dynamic textures will be used to draw the scene into itself +var renderTexture = new PIXI.RenderTexture(800, 600); +var renderTexture2 = new PIXI.RenderTexture(800, 600); +var currentTexture = renderTexture; + +// create a new sprite that uses the render texture we created above +var outputSprite = new PIXI.Sprite(currentTexture); + +// align the sprite +outputSprite.position.x = 800/2; +outputSprite.position.y = 600/2; +outputSprite.anchor.x = 0.5; +outputSprite.anchor.y = 0.5; + +// add to stage +stage.addChild(outputSprite); + +var stuffContainer = new PIXI.DisplayObjectContainer(); + +stuffContainer.position.x = 800/2; +stuffContainer.position.y = 600/2 + +stage.addChild(stuffContainer); + +// create an array of image ids.. +var fruits = ["spinObj_01.png", "spinObj_02.png", + "spinObj_03.png", "spinObj_04.png", + "spinObj_05.png", "spinObj_06.png", + "spinObj_07.png", "spinObj_08.png"]; + +// create an array of items +var items = []; + +// now create some items and randomly position them in the stuff container +for (var i=0; i < 20; i++) +{ + var item = PIXI.Sprite.fromImage(fruits[i % fruits.length]); + item.position.x = Math.random() * 400 - 200; + item.position.y = Math.random() * 400 - 200; + + item.anchor.x = 0.5; + item.anchor.y = 0.5; + + stuffContainer.addChild(item); + console.log("_") + items.push(item); +}; + +// used for spinning! +var count = 0; + + +requestAnimFrame(animate); + +function animate2() { + + requestAnimFrame( animate ); + + for (var i=0; i < items.length; i++) + { + // rotate each item + var item = items[i]; + item.rotation += 0.1; + }; + + count += 0.01; + + // swap the buffers.. + var temp = renderTexture; + renderTexture = renderTexture2; + renderTexture2 = temp; + + + // set the new texture + outputSprite.setTexture(renderTexture); + + // twist this up! + stuffContainer.rotation -= 0.01 + outputSprite.scale.x = outputSprite.scale.y = 1 + Math.sin(count) * 0.2; + + // render the stage to the texture + // the true clears the texture before content is rendered + renderTexture2.render(stage, new PIXI.Point(0,0), true); + + // and finally render the stage + renderer.render(stage); +} + + +//// + + + +function init() +{ + var assetsToLoader = ["desyrel.fnt"]; + + // create a new loader + var loader = new PIXI.AssetLoader(assetsToLoader); + + // use callback + loader.onComplete = onAssetsLoaded; + + //begin load + + // create an new instance of a pixi stage + var stage = new PIXI.Stage(0x66FF99); + + loader.load(); + function onAssetsLoaded() + { + var bitmapFontText = new PIXI.BitmapText("bitmap fonts are\n now supported!", {font: "35px Desyrel", align: "right"}); + bitmapFontText.position.x = 620 - bitmapFontText.width - 20; + bitmapFontText.position.y = 20; + + PIXI.runList(bitmapFontText) + stage.addChild(bitmapFontText); + + + } + + + + // add a shiney background.. + var background = PIXI.Sprite.fromImage("textDemoBG.jpg"); + stage.addChild(background); + + // create a renderer instance + var renderer = PIXI.autoDetectRenderer(620, 400); + // add the renderer view element to the DOM + document.body.appendChild(renderer.view); + + requestAnimFrame(animate); + + // create some white text using the Snippet webfont + var textSample = new PIXI.Text("Pixi.js can has\nmultiline text!", {font: "35px Snippet", fill: "white", align: "left"}); + textSample.position.x = 20; + textSample.position.y = 20; + + // create a text object with a nice stroke + var spinningText = new PIXI.Text("I'm fun!", {font: "bold 60px Podkova", fill: "#cc00ff", align: "center", stroke: "#FFFFFF", strokeThickness: 6}); + // setting the anchor point to 0.5 will center align the text... great for spinning! + spinningText.anchor.x = spinningText.anchor.y = 0.5; + spinningText.position.x = 620 / 2; + spinningText.position.y = 400 / 2; + + // create a text object that will be updated.. + var countingText = new PIXI.Text("COUNT 4EVAR: 0", {font: "bold italic 60px Arvo", fill: "#3e1707", align: "center", stroke: "#a4410e", strokeThickness: 7}); + countingText.position.x = 620 / 2; + countingText.position.y = 320; + countingText.anchor.x = 0.5; + + stage.addChild(textSample); + stage.addChild(spinningText); + stage.addChild(countingText); + + var count = 0; + var score = 0; + + function animate() { + + requestAnimFrame( animate ); + count++; + if(count == 50) + { + count = 0; + score++; + // update the text... + countingText.setText("COUNT 4EVAR: " + score); + + } + // just for fun, lets rotate the text + spinningText.rotation += 0.03; + + // render the stage + renderer.render(stage); + } +} + + +///// + + + +// create an new instance of a pixi stage +var stage = new PIXI.Stage(0x97c56e, true); + +// create a renderer instance +var renderer = PIXI.autoDetectRenderer(window.innerWidth, window.innerHeight, null); + +// add the renderer view element to the DOM +document.body.appendChild(renderer.view); +renderer.view.style.position = "absolute"; +renderer.view.style.top = "0px"; +renderer.view.style.left = "0px"; +requestAnimFrame( animate ); + +// create a texture from an image path +var texture = PIXI.Texture.fromImage("p2.jpeg"); + +// create a tiling sprite.. +// requires a texture, width and height +// to work in webGL the texture size must be a power of two +var tilingSprite = new PIXI.TilingSprite(texture, window.innerWidth, window.innerHeight) + +var count = 0; + +stage.addChild(tilingSprite); + +function animate33() { + + requestAnimFrame( animate ); + + + count += 0.005 + tilingSprite.tileScale.x = 2 + Math.sin(count); + tilingSprite.tileScale.y = 2 + Math.cos(count); + + tilingSprite.tilePosition.x += 1; + tilingSprite.tilePosition.y += 1; + + // just for fun, lets rotate mr rabbit a little + //stage.interactionManager.update(); + // render the stage + renderer.render(stage); +} + + + +///// + + +// create an new instance of a pixi stage +var stage = new PIXI.Stage(0x97c56e, true); + +// create a renderer instance +var renderer = PIXI.autoDetectRenderer(window.innerWidth, window.innerHeight, null); + +// add the renderer view element to the DOM +document.body.appendChild(renderer.view); +renderer.view.style.position = "absolute"; +renderer.view.style.top = "0px"; +renderer.view.style.left = "0px"; +requestAnimFrame( animate ); + +// create a texture from an image path +var texture = PIXI.Texture.fromImage("bunny.png"); + +for (var i=0; i < 10; i++) +{ + createBunny(Math.random() * window.innerWidth, Math.random() * window.innerHeight) +}; + + +function createBunny(x, y) +{ + // create our little bunny friend.. + var bunny = new PIXI.Sprite(texture); + // bunny.width = 300; + // enable the bunny to be interactive.. this will allow it to respond to mouse and touch events + bunny.interactive = true; + // this button mode will mean the hand cursor appears when you rollover the bunny with your mouse + bunny.buttonMode = true; + + // center the bunnys anchor point + bunny.anchor.x = 0.5; + bunny.anchor.y = 0.5; + // make it a bit bigger, so its easier to touch + bunny.scale.x = bunny.scale.y = 3; + + + // use the mousedown and touchstart + bunny.mousedown = bunny.touchstart = function(data) + { + // stop the default event... + data.originalEvent.preventDefault(); + + // store a refference to the data + // The reason for this is because of multitouch + // we want to track the movement of this particular touch + this.data = data; + this.alpha = 0.9; + this.dragging = true; + }; + + // set the events for when the mouse is released or a touch is released + bunny.mouseup = bunny.mouseupoutside = bunny.touchend = bunny.touchendoutside = function(data) + { + this.alpha = 1 + this.dragging = false; + // set the interaction data to null + this.data = null; + }; + + // set the callbacks for when the mouse or a touch moves + bunny.mousemove = bunny.touchmove = function(data) + { + if(this.dragging) + { + // need to get parent coords.. + var newPosition = this.data.getLocalPosition(this.parent); + this.position.x = newPosition.x; + this.position.y = newPosition.y; + } + } + + // move the sprite to its designated position + bunny.position.x = x; + bunny.position.y = y; + + // add it to the stage + stage.addChild(bunny); +} + +function animate44() { + + requestAnimFrame( animate ); + + // just for fun, lets rotate mr rabbit a little + //stage.interactionManager.update(); + // render the stage + renderer.render(stage); +} + + + +//// + +// create an new instance of a pixi stage +var stage = new PIXI.Stage(0x66FF99); + +// create a renderer instance +var renderer = PIXI.autoDetectRenderer(400, 300, null, true); + +// add the renderer view element to the DOM +document.body.appendChild(renderer.view); +renderer.view.style.position = "absolute"; +renderer.view.style.top = "0px"; +renderer.view.style.left = "0px"; +requestAnimFrame( animate ); + +// create a texture from an image path +var texture = PIXI.Texture.fromImage("bunny.png"); +// create a new Sprite using the texture +var bunny = new PIXI.Sprite(texture); + +// center the sprites anchor point +bunny.anchor.x = 0.5; +bunny.anchor.y = 0.5; + +// move the sprite t the center of the screen +bunny.position.x = 200; +bunny.position.y = 150; + +stage.addChild(bunny); + +function animate55() { + + requestAnimFrame( animate ); + + // just for fun, lets rotate mr rabbit a little + bunny.rotation += 0.1; + + // render the stage + renderer.render(stage); +} + + + +/////// + + + +// create an new instance of a pixi stage +// the second parameter is interactivity... +var interactive = true; +var stage = new PIXI.Stage(0x000000, interactive); + +// create a renderer instance. +var renderer = PIXI.autoDetectRenderer(620, 400); + +// add the renderer view element to the DOM +document.body.appendChild(renderer.view); + +requestAnimFrame( animate ); + +// create a background.. +var background = PIXI.Sprite.fromImage("button_test_BG.jpg"); + +// add background to stage.. +stage.addChild(background); + +// create some textures from an image path +var textureButton = PIXI.Texture.fromImage("button.png"); +var textureButtonDown = PIXI.Texture.fromImage("buttonDown.png"); +var textureButtonOver = PIXI.Texture.fromImage("buttonOver.png"); + +var buttons = []; + +var buttonPositions = [175,75, + 600-145, 75, + 600/2 - 20, 400/2 + 10, + 175, 400-75, + 600-115, 400-95]; + + +for (var i=0; i < 5; i++) +{ + var button = new PIXI.Sprite(textureButton); + button.buttonMode = true; + + button.anchor.x = 0.5; + button.anchor.y = 0.5; + + button.position.x = buttonPositions[i*2]; + button.position.y = buttonPositions[i*2 + 1]; + + // make the button interactive.. + button.interactive = true; + + // set the mousedown and touchstart callback.. + button.mousedown = button.touchstart = function(data){ + + this.isdown = true; + this.setTexture(textureButtonDown); + this.alpha = 1; + } + + // set the mouseup and touchend callback.. + button.mouseup = button.touchend = button.mouseupoutside = button.touchendoutside = function(data){ + this.isdown = false; + + if(this.isOver) + { + this.setTexture(textureButtonOver); + } + else + { + this.setTexture(textureButton); + } + } + + // set the mouseover callback.. + button.mouseover = function(data){ + + this.isOver = true; + + if(this.isdown)return + + this.setTexture(textureButtonOver) + } + + // set the mouseout callback.. + button.mouseout = function(data){ + + this.isOver = false; + if(this.isdown)return + this.setTexture(textureButton) + } + + button.click = function(data){ + // click! + console.log("CLICK!"); + // alert("CLICK!") + } + + button.tap = function(data){ + // click! + console.log("TAP!!"); + //this.alpha = 0.5; + } + + // add it to the stage + stage.addChild(button); + + // add button to array + buttons.push(button); +}; + +// set some silly values.. + +buttons[0].scale.x = 1.2; + +buttons[1].scale.y = 1.2; + +buttons[2].rotation = Math.PI/10; + +buttons[3].scale.x = 0.8; +buttons[3].scale.y = 0.8; + +buttons[4].scale.x = 0.8; +buttons[4].scale.y = 1.2; +buttons[4].rotation = Math.PI; +// var button1 = +function animate66() { + + requestAnimFrame( animate ); + // render the stage + + // do a test.. + + renderer.render(stage); +} + +// add a logo! +var pixiLogo = PIXI.Sprite.fromImage("pixi.png"); +stage.addChild(pixiLogo); + +pixiLogo.position.x = 620 - 56; +pixiLogo.position.y = 400- 32; + +pixiLogo.setInteractive(true); + +pixiLogo.click = pixiLogo.tap = function(){ + + var win=window.open("https://github.com/GoodBoyDigital/pixi.js", '_blank'); + +} + + +////// + + + +var w = 1024; +var h = 768; + +var n = 2000; +var d = 1; +var current = 1; +var objs = 17; +var vx = 0; +var vy = 0; +var vz = 0; +var points1 = []; +var points2 = []; +var points3 = []; +var tpoint1 = []; +var tpoint2 = []; +var tpoint3 = []; +var balls = []; + +function start() { + + var ballTexture = PIXI.Texture.fromImage("assets/pixel.png"); + + renderer = PIXI.autoDetectRenderer(w, h); + + stage = new PIXI.Stage(0x000000); + + document.body.appendChild(renderer.view); + + makeObject(0); + + for (var i = 0; i < n; i++) + { + tpoint1[i] = points1[i]; + tpoint2[i] = points2[i]; + tpoint3[i] = points3[i]; + + var tempBall = new PIXI.Sprite(ballTexture); + tempBall.anchor.x = 0.5; + tempBall.anchor.y = 0.5; + tempBall.alpha = 0.5; + balls[i] = tempBall; + + stage.addChild(tempBall); + } + + + + setTimeout(nextObject, 5000); + + requestAnimFrame(update); + +} + +function nextObject () { + + current++; + + if (current > objs) + { + current = 0; + } + + makeObject(current); + + setTimeout(nextObject, 8000); + +} + +function makeObject ( t ) { + + var xd; + + switch (t) + { + case 0: + + for (var i = 0; i < n; i++) + { + points1[i] = -50 + Math.round(Math.random() * 100); + points2[i] = 0; + points3[i] = 0; + } + break; + + case 1: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(t * 360 / n) * 10); + points2[i] = (Math.cos(xd) * 10) * (Math.sin(t * 360 / n) * 10); + points3[i] = Math.sin(xd) * 100; + } + break; + + case 2: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(t * 360 / n) * 10); + points2[i] = (Math.cos(xd) * 10) * (Math.sin(t * 360 / n) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 3: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(xd) * 10); + points2[i] = (Math.cos(xd) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(xd) * 100; + } + break; + + case 4: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(xd) * 10); + points2[i] = (Math.cos(xd) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 5: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(xd) * 10); + points2[i] = (Math.cos(i * 360 / n) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 6: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(i * 360 / n) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.cos(i * 360 / n) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 7: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(i * 360 / n) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.cos(i * 360 / n) * 10) * (Math.sin(i * 360 / n) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 8: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.cos(i * 360 / n) * 10) * (Math.sin(i * 360 / n) * 10); + points3[i] = Math.sin(xd) * 100; + } + break; + + case 9: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.cos(i * 360 / n) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(xd) * 100; + } + break; + + case 10: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(i * 360 / n) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.cos(xd) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 11: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.sin(xd) * 10) * (Math.sin(i * 360 / n) * 10); + points3[i] = Math.sin(xd) * 100; + } + break; + + case 12: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(xd) * 10); + points2[i] = (Math.sin(xd) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 13: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.sin(i * 360 / n) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 14: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.sin(xd) * 10) * (Math.cos(xd) * 10); + points2[i] = (Math.sin(xd) * 10) * (Math.sin(i * 360 / n) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 15: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(i * 360 / n) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.sin(i * 360 / n) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + + case 16: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(i * 360 / n) * 10); + points2[i] = (Math.sin(i * 360 / n) * 10) * (Math.sin(xd) * 10); + points3[i] = Math.sin(xd) * 100; + } + break; + + case 17: + + for (var i = 0; i < n; i++) + { + xd = -90 + Math.round(Math.random() * 180); + points1[i] = (Math.cos(xd) * 10) * (Math.cos(xd) * 10); + points2[i] = (Math.cos(i * 360 / n) * 10) * (Math.sin(i * 360 / n) * 10); + points3[i] = Math.sin(i * 360 / n) * 100; + } + break; + } + +} + + + +function update() +{ + var x3d, y3d, z3d, tx, ty, tz, ox; + + if (d < 250) + { + d++; + } + + vx += 0.0075; + vy += 0.0075; + vz += 0.0075; + + for (var i = 0; i < n; i++) + { + if (points1[i] > tpoint1[i]) { tpoint1[i] = tpoint1[i] + 1; } + if (points1[i] < tpoint1[i]) { tpoint1[i] = tpoint1[i] - 1; } + if (points2[i] > tpoint2[i]) { tpoint2[i] = tpoint2[i] + 1; } + if (points2[i] < tpoint2[i]) { tpoint2[i] = tpoint2[i] - 1; } + if (points3[i] > tpoint3[i]) { tpoint3[i] = tpoint3[i] + 1; } + if (points3[i] < tpoint3[i]) { tpoint3[i] = tpoint3[i] - 1; } + + x3d = tpoint1[i]; + y3d = tpoint2[i]; + z3d = tpoint3[i]; + + ty = (y3d * Math.cos(vx)) - (z3d * Math.sin(vx)); + tz = (y3d * Math.sin(vx)) + (z3d * Math.cos(vx)); + tx = (x3d * Math.cos(vy)) - (tz * Math.sin(vy)); + tz = (x3d * Math.sin(vy)) + (tz * Math.cos(vy)); + ox = tx; + tx = (tx * Math.cos(vz)) - (ty * Math.sin(vz)); + ty = (ox * Math.sin(vz)) + (ty * Math.cos(vz)); + + balls[i].position.x = (512 * tx) / (d - tz) + w / 2; + balls[i].position.y = (h/2) - (512 * ty) / (d - tz); + + } + + renderer.render(stage); + + requestAnimFrame(update); +} + + + +/////// + + + +// Globals, globals everywhere and not a drop to drink +var w = 1024; +var h = 768; +var starCount = 2500; +var sx = 1.0 + (Math.random() / 20); +var sy = 1.0 + (Math.random() / 20); +var slideX = w / 2; +var slideY = h / 2; +var stars = []; + +function start2() { + + var ballTexture = PIXI.Texture.fromImage("assets/bubble_32x32.png"); + + renderer = PIXI.autoDetectRenderer(w, h); + + stage = new PIXI.Stage(0x000000); + + document.body.appendChild(renderer.view); + + for (var i = 0; i < starCount; i++) + { + var tempBall = new PIXI.Sprite(ballTexture); + + tempBall.position.x = (Math.random() * w) - slideX; + tempBall.position.y = (Math.random() * h) - slideY; + tempBall.anchor.x = 0.5; + tempBall.anchor.y = 0.5; + + stars.push({ sprite: tempBall, x: tempBall.position.x, y: tempBall.position.y }); + + stage.addChild(tempBall); + } + + document.getElementById('rnd').onclick = newWave; + document.getElementById('sx').innerHTML = 'SX: ' + sx + '
SY: ' + sy; + + + + requestAnimFrame(update); + +} + +function newWave () { + + sx = 1.0 + (Math.random() / 20); + sy = 1.0 + (Math.random() / 20); + document.getElementById('sx').innerHTML = 'SX: ' + sx + '
SY: ' + sy; + +} + + + +function update22() +{ + for (var i = 0; i < starCount; i++) + { + stars[i].sprite.position.x = stars[i].x + slideX; + stars[i].sprite.position.y = stars[i].y + slideY; + stars[i].x = stars[i].x * sx; + stars[i].y = stars[i].y * sy; + + if (stars[i].x > w) + { + stars[i].x = stars[i].x - w; + } + else if (stars[i].x < -w) + { + stars[i].x = stars[i].x + w; + } + + if (stars[i].y > h) + { + stars[i].y = stars[i].y - h; + } + else if (stars[i].y < -h) + { + stars[i].y = stars[i].y + h; + } + } + + renderer.render(stage); + + requestAnimFrame(update); +} diff --git a/pixi/pixi.d.ts b/pixi/pixi.d.ts new file mode 100644 index 0000000000..d5daba9481 --- /dev/null +++ b/pixi/pixi.d.ts @@ -0,0 +1,447 @@ +// Type definitions for PIXI 1.3 +// Project: https://github.com/GoodBoyDigital/pixi.js/ +// Definitions by: xperiments +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// +declare module PIXI +{ + + /* STATICS */ + export var gl:WebGLRenderingContext; + export var BaseTextureCache: {}; + export var texturesToUpdate: BaseTexture[]; + export var texturesToDestroy: BaseTexture[]; + export var TextureCache: {}; + export var FrameCache: {}; + export var blendModes:{ NORMAL:number; SCREEN:number; }; + + + /* MODULE FUNCTIONS */ + export function autoDetectRenderer(width: number, height: number, view?: HTMLCanvasElement, transparent?: boolean, antialias?: boolean): IPixiRenderer; + export function FilterBlock( mask:Graphics ):void; + export function MaskFilter( graphics:Graphics ):void; + + + /* DEBUG METHODS */ + + export function runList( x ):void; + + /*INTERFACES*/ + + export interface IBasicCallback + { + ():void + } + + export interface IEvent + { + type: string; + content: any; + } + + export interface IHitArea + { + contains(x: number, y: number):boolean; + } + + export interface IInteractionDataCallback + { + (interactionData: InteractionData):void + } + + export interface IPixiRenderer + { + view: HTMLCanvasElement; + render(stage: Stage): void; + } + + export interface IBitmapTextStyle + { + font?: string; + align?: string; + } + + export interface ITextStyle + { + font?: string; + stroke?: string; + fill?: string; + align?: string; + strokeThickness?: number; + wordWrap?: boolean; + wordWrapWidth?:number; + } + + + + /* CLASES */ + + export class AssetLoader extends EventTarget + { + assetURLs: string[]; + onComplete: IBasicCallback; + onProgress: IBasicCallback; + constructor(assetURLs: string[], crossorigin?:boolean ); + load(): void; + } + + export class BaseTexture extends EventTarget + { + height: number; + width: number; + source: string; + + constructor(source: HTMLImageElement); + constructor(source: HTMLCanvasElement); + destroy():void; + + static fromImage(imageUrl: string, crossorigin?:boolean ): BaseTexture; + } + + export class BitmapFontLoader extends EventTarget + { + baseUrl:string; + crossorigin:boolean; + texture:Texture; + url:string; + constructor(url: string, crossorigin?: boolean); + load():void; + } + + export class BitmapText extends DisplayObjectContainer + { + width:number; + height:number; + constructor(text: string, style: IBitmapTextStyle); + setStyle(style: IBitmapTextStyle): void; + setText(text: string): void; + } + + export class CanvasRenderer implements IPixiRenderer + { + context: CanvasRenderingContext2D; + height: number; + view: HTMLCanvasElement; + width: number; + constructor(width: number, height: number, view?: HTMLCanvasElement, transparent?: boolean); + render(stage: Stage): void; + resize(width: number, height: number):void; + } + + export class Circle implements IHitArea + { + x: number; + y: number; + radius: number; + constructor(x: number, y: number, radius: number); + clone(): Circle; + contains(x: number, y: number):boolean; + } + + // TODO what is renderGroup + export class CustomRenderable extends DisplayObject + { + constructor(); + renderCanvas(renderer: CanvasRenderer): void; + initWebGL(renderer: WebGLRenderer): void; + renderWebGL(renderGroup: any, projectionMatrix: any): void; + } + + export class DisplayObject + { + alpha: number; + buttonMode: boolean; + filter:boolean; + hitArea: IHitArea; + parent: DisplayObjectContainer; + pivot: Point; + position: Point; + rotation: number; + renderable: boolean; + scale: Point; + stage: Stage; + visible: boolean; + worldAlpha: number; + constructor(); + static autoDetectRenderer(width: number, height: number, view?: HTMLCanvasElement, transparent?: boolean): IPixiRenderer; + click: IInteractionDataCallback; + mousedown: IInteractionDataCallback; + mouseout: IInteractionDataCallback; + mouseover: IInteractionDataCallback; + mouseup: IInteractionDataCallback; + mouseupoutside: IInteractionDataCallback; + mousemove: IInteractionDataCallback; + tap: IInteractionDataCallback; + touchend: IInteractionDataCallback; + touchendoutside: IInteractionDataCallback; + touchstart: IInteractionDataCallback; + touchmove: IInteractionDataCallback; + + //deprecated + setInteractive(interactive: boolean): void; + + // getters setters + interactive:boolean; + mask:Graphics; + } + + export class DisplayObjectContainer extends DisplayObject + { + children: DisplayObject[]; + constructor(); + + addChild(child: DisplayObject): void; + addChildAt(child: DisplayObject, index: number): void; + getChildAt(index:number):DisplayObject; + removeChild(child: DisplayObject): void; + swapChildren(child: DisplayObject, child2: DisplayObject): void; + } + + export class Ellipse implements IHitArea + { + x: number; + y: number; + width: number; + height: number; + + constructor(x: number, y: number, width: number, height: number); + clone(): Ellipse; + contains(x: number, y: number):boolean; + getBounds():Rectangle; + } + + export class EventTarget + { + addEventListener(type: string, listener: (event: IEvent) => void ); + removeEventListener(type: string, listener: (event: IEvent) => void ); + dispatchEvent(event: IEvent); + } + + export class Graphics extends DisplayObjectContainer + { + lineWidth:number; + lineColor:string; + constructor(); + + beginFill(color?: number, alpha?: number): void; + clear(): void; + drawCircle(x: number, y: number, radius: number): void; + drawElipse(x: number, y: number, width: number, height: number): void; + drawRect(x: number, y: number, width: number, height: number): void; + endFill(): void; + lineStyle(lineWidth?: number, color?: number, alpha?: number ): void; + lineTo(x: number, y: number): void; + moveTo(x: number, y: number): void; + + static POLY:number; + static RECT:number; + static CIRC:number; + static ELIP:number; + } + + export class ImageLoader extends EventTarget + { + texture:Texture; + constructor(url: string, crossorigin?: boolean); + load(): void; + } + + /* TODO determine type of originalEvent*/ + export class InteractionData + { + global: Point; + target: Sprite; + constructor(); + originalEvent:any; + getLocalPosition(displayObject: DisplayObject): Point; + } + + export class InteractionManager + { + mouse: InteractionData; + stage: Stage; + touchs:{ [id:string]:InteractionData }; + constructor(stage: Stage); + } + + export class JsonLoader extends EventTarget + { + url:string; + crossorigin: boolean; + baseUrl:string; + loaded:boolean; + constructor(url: string, crossorigin?: boolean); + load(): void; + } + + export class MovieClip extends Sprite + { + animationSpeed: number; + currentFrame:number; + loop: boolean; + playing: boolean; + textures: Texture[]; + constructor(textures: Texture[]); + onComplete:IBasicCallback; + gotoAndPlay(frameNumber: number): void; + gotoAndStop(frameNumber: number): void; + play(): void; + stop(): void; + } + + export class Point + { + x: number; + y: number; + constructor(x: number, y: number); + clone(): Point; + } + + export class Polygon implements IHitArea + { + points: Point[]; + + constructor(points: Point[]); + constructor(points: number[]); + constructor(...points: Point[]); + constructor(...points: number[]); + + clone(): Polygon; + contains( x:number, y:number ):boolean; + } + + export class Rectangle implements IHitArea + { + x: number; + y: number; + width: number; + height: number; + constructor(x: number, y: number, width: number, height: number); + clone(): Rectangle; + contains(x: number, y: number):boolean + } + + export class RenderTexture extends Texture + { + constructor(width: number, height: number); + resize(width: number, height: number): void; + } + + export class Sprite extends DisplayObjectContainer + { + anchor: Point; + blendMode: number; + texture: Texture; + + //getters setters + height: number; + width: number; + + constructor(texture: Texture); + + static fromFrame(frameId: string): Sprite; + static fromImage(url: string): Sprite; + setTexture(texture: Texture): void; + } + + /* TODO determine type of frames */ + export class SpriteSheetLoader extends EventTarget + { + url:string; + crossorigin:boolean; + baseUrl:string; + texture:Texture; + frames:Object; + constructor(url: string, crossorigin?: boolean); + load(); + } + + export class Stage extends DisplayObjectContainer + { + interactive:boolean; + interactionManager:InteractionManager; + constructor(backgroundColor: number, interactive?: boolean); + getMousePosition(): Point; + setBackgroundColor(backgroundColor: number): void; + } + + export class Text extends Sprite + { + constructor(text: string, style: ITextStyle); + destroy(destroyTexture:boolean):void; + setText(text: string): void; + setStyle(style: ITextStyle): void; + } + + export class Texture extends EventTarget + { + baseTexture: BaseTexture; + frame: Rectangle; + trim:Point; + render( displayObject:DisplayObject, position:Point, clear:boolean ):void; + constructor(baseTexture: BaseTexture, frame?: Rectangle); + destroy(destroyBase:boolean):void; + setFrame(frame: Rectangle): void; + + static addTextureToCache(texture: Texture, id: string): void; + static fromCanvas(canvas: HTMLCanvasElement): Texture; + static fromFrame(frameId: string): Texture; + static fromImage(imageUrl: string, crossorigin?: boolean): Texture; + static removeTextureFromCache(id: any): Texture; + } + + export class TilingSprite extends DisplayObjectContainer + { + width:number; + height:number; + texture:Texture; + tilePosition: Point; + tileScale: Point; + constructor(texture: Texture, width: number, height: number); + setTexture( texture: Texture ):void; + } + + export class WebGLBatch + { + constructor(webGLContext: WebGLRenderingContext); + clean():void; + restoreLostContext(gl:WebGLRenderingContext) + init(sprite: Sprite): void; + insertAfter(sprite: Sprite, previousSprite: Sprite): void; + insertBefore(sprite: Sprite, nextSprite: Sprite): void; + growBatch(): void; + merge(batch: WebGLBatch): void; + refresh(): void; + remove(sprite: Sprite): void; + render(): void; + split(sprite: Sprite): WebGLBatch; + update(): void; + } + + /* Determine type of Object */ + export class WebGLRenderGroup + { + render(projection:Object):void; + } + + export class WebGLRenderer implements IPixiRenderer + { + view: HTMLCanvasElement; + constructor(width: number, height: number, view?: HTMLCanvasElement, transparent?: boolean, antialias?:boolean ); + render(stage: Stage): void; + resize(width: number, height: number): void; + } + +} + +declare function requestAnimFrame( animate: PIXI.IBasicCallback ); + + +declare module PIXI.PolyK +{ + export function Triangulate( p:number[]):number[]; +} + + + diff --git a/pixi/webgl.d.ts b/pixi/webgl.d.ts new file mode 100644 index 0000000000..63172ad92e --- /dev/null +++ b/pixi/webgl.d.ts @@ -0,0 +1,534 @@ +interface WebGLContextAttributes { + alpha : boolean; + depth : boolean; + stencil : boolean; + antialias : boolean; + premultipliedAlpha : boolean; +} + +interface WebGLObject { + $__dummyprop__WebGLObject : any; +} + +interface WebGLBuffer extends WebGLObject { + $__dummyprop__WebGLBuffer : any; +} + +interface WebGLFramebuffer extends WebGLObject { + $__dummyprop__WebGLFramebuffer : any; +} + +interface WebGLProgram extends WebGLObject { + $__dummyprop__WebGLProgram : any; +} + +interface WebGLRenderbuffer extends WebGLObject { + $__dummyprop__WebGLRenderbuffer : any; +} + +interface WebGLShader extends WebGLObject { + $__dummyprop__WebGLShader : any; +} + +interface WebGLTexture extends WebGLObject { + $__dummyprop__WebGLTexture : any; +} + +interface WebGLUniformLocation { + $__dummyprop__WebGLUniformLocation : any; +} + +interface WebGLActiveInfo { + size : number; + type : number; + name : string; +} + +interface WebGLRenderingContext { + DEPTH_BUFFER_BIT : number; + STENCIL_BUFFER_BIT : number; + COLOR_BUFFER_BIT : number; + POINTS : number; + LINES : number; + LINE_LOOP : number; + LINE_STRIP : number; + TRIANGLES : number; + TRIANGLE_STRIP : number; + TRIANGLE_FAN : number; + ZERO : number; + ONE : number; + SRC_COLOR : number; + ONE_MINUS_SRC_COLOR : number; + SRC_ALPHA : number; + ONE_MINUS_SRC_ALPHA : number; + DST_ALPHA : number; + ONE_MINUS_DST_ALPHA : number; + DST_COLOR : number; + ONE_MINUS_DST_COLOR : number; + SRC_ALPHA_SATURATE : number; + FUNC_ADD : number; + BLEND_EQUATION : number; + BLEND_EQUATION_RGB : number; + BLEND_EQUATION_ALPHA : number; + FUNC_SUBTRACT : number; + FUNC_REVERSE_SUBTRACT : number; + BLEND_DST_RGB : number; + BLEND_SRC_RGB : number; + BLEND_DST_ALPHA : number; + BLEND_SRC_ALPHA : number; + CONSTANT_COLOR : number; + ONE_MINUS_CONSTANT_COLOR : number; + CONSTANT_ALPHA : number; + ONE_MINUS_CONSTANT_ALPHA : number; + BLEND_COLOR : number; + ARRAY_BUFFER : number; + ELEMENT_ARRAY_BUFFER : number; + ARRAY_BUFFER_BINDING : number; + ELEMENT_ARRAY_BUFFER_BINDING : number; + STREAM_DRAW : number; + STATIC_DRAW : number; + DYNAMIC_DRAW : number; + BUFFER_SIZE : number; + BUFFER_USAGE : number; + CURRENT_VERTEX_ATTRIB : number; + FRONT : number; + BACK : number; + FRONT_AND_BACK : number; + TEXTURE_2D : number; + CULL_FACE : number; + BLEND : number; + DITHER : number; + STENCIL_TEST : number; + DEPTH_TEST : number; + SCISSOR_TEST : number; + POLYGON_OFFSET_FILL : number; + SAMPLE_ALPHA_TO_COVERAGE : number; + SAMPLE_COVERAGE : number; + NO_ERROR : number; + INVALID_ENUM : number; + INVALID_VALUE : number; + INVALID_OPERATION : number; + OUT_OF_MEMORY : number; + CW : number; + CCW : number; + LINE_WIDTH : number; + ALIASED_POINT_SIZE_RANGE : number; + ALIASED_LINE_WIDTH_RANGE : number; + CULL_FACE_MODE : number; + FRONT_FACE : number; + DEPTH_RANGE : number; + DEPTH_WRITEMASK : number; + DEPTH_CLEAR_VALUE : number; + DEPTH_FUNC : number; + STENCIL_CLEAR_VALUE : number; + STENCIL_FUNC : number; + STENCIL_FAIL : number; + STENCIL_PASS_DEPTH_FAIL : number; + STENCIL_PASS_DEPTH_PASS : number; + STENCIL_REF : number; + STENCIL_VALUE_MASK : number; + STENCIL_WRITEMASK : number; + STENCIL_BACK_FUNC : number; + STENCIL_BACK_FAIL : number; + STENCIL_BACK_PASS_DEPTH_FAIL : number; + STENCIL_BACK_PASS_DEPTH_PASS : number; + STENCIL_BACK_REF : number; + STENCIL_BACK_VALUE_MASK : number; + STENCIL_BACK_WRITEMASK : number; + VIEWPORT : number; + SCISSOR_BOX : number; + COLOR_CLEAR_VALUE : number; + COLOR_WRITEMASK : number; + UNPACK_ALIGNMENT : number; + PACK_ALIGNMENT : number; + MAX_TEXTURE_SIZE : number; + MAX_VIEWPORT_DIMS : number; + SUBPIXEL_BITS : number; + RED_BITS : number; + GREEN_BITS : number; + BLUE_BITS : number; + ALPHA_BITS : number; + DEPTH_BITS : number; + STENCIL_BITS : number; + POLYGON_OFFSET_UNITS : number; + POLYGON_OFFSET_FACTOR : number; + TEXTURE_BINDING_2D : number; + SAMPLE_BUFFERS : number; + SAMPLES : number; + SAMPLE_COVERAGE_VALUE : number; + SAMPLE_COVERAGE_INVERT : number; + NUM_COMPRESSED_TEXTURE_FORMATS : number; + COMPRESSED_TEXTURE_FORMATS : number; + DONT_CARE : number; + FASTEST : number; + NICEST : number; + GENERATE_MIPMAP_HINT : number; + BYTE : number; + UNSIGNED_BYTE : number; + SHORT : number; + UNSIGNED_SHORT : number; + INT : number; + UNSIGNED_INT : number; + FLOAT : number; + DEPTH_COMPONENT : number; + ALPHA : number; + RGB : number; + RGBA : number; + LUMINANCE : number; + LUMINANCE_ALPHA : number; + UNSIGNED_SHORT_4_4_4_4 : number; + UNSIGNED_SHORT_5_5_5_1 : number; + UNSIGNED_SHORT_5_6_5 : number; + FRAGMENT_SHADER : number; + VERTEX_SHADER : number; + MAX_VERTEX_ATTRIBS : number; + MAX_VERTEX_UNIFORM_VECTORS : number; + MAX_VARYING_VECTORS : number; + MAX_COMBINED_TEXTURE_IMAGE_UNITS : number; + MAX_VERTEX_TEXTURE_IMAGE_UNITS : number; + MAX_TEXTURE_IMAGE_UNITS : number; + MAX_FRAGMENT_UNIFORM_VECTORS : number; + SHADER_TYPE : number; + DELETE_STATUS : number; + LINK_STATUS : number; + VALIDATE_STATUS : number; + ATTACHED_SHADERS : number; + ACTIVE_UNIFORMS : number; + ACTIVE_UNIFORM_MAX_LENGTH : number; + ACTIVE_ATTRIBUTES : number; + ACTIVE_ATTRIBUTE_MAX_LENGTH : number; + SHADING_LANGUAGE_VERSION : number; + CURRENT_PROGRAM : number; + NEVER : number; + LESS : number; + EQUAL : number; + LEQUAL : number; + GREATER : number; + NOTEQUAL : number; + GEQUAL : number; + ALWAYS : number; + KEEP : number; + REPLACE : number; + INCR : number; + DECR : number; + INVERT : number; + INCR_WRAP : number; + DECR_WRAP : number; + VENDOR : number; + RENDERER : number; + VERSION : number; + NEAREST : number; + LINEAR : number; + NEAREST_MIPMAP_NEAREST : number; + LINEAR_MIPMAP_NEAREST : number; + NEAREST_MIPMAP_LINEAR : number; + LINEAR_MIPMAP_LINEAR : number; + TEXTURE_MAG_FILTER : number; + TEXTURE_MIN_FILTER : number; + TEXTURE_WRAP_S : number; + TEXTURE_WRAP_T : number; + TEXTURE : number; + TEXTURE_CUBE_MAP : number; + TEXTURE_BINDING_CUBE_MAP : number; + TEXTURE_CUBE_MAP_POSITIVE_X : number; + TEXTURE_CUBE_MAP_NEGATIVE_X : number; + TEXTURE_CUBE_MAP_POSITIVE_Y : number; + TEXTURE_CUBE_MAP_NEGATIVE_Y : number; + TEXTURE_CUBE_MAP_POSITIVE_Z : number; + TEXTURE_CUBE_MAP_NEGATIVE_Z : number; + MAX_CUBE_MAP_TEXTURE_SIZE : number; + TEXTURE0 : number; + TEXTURE1 : number; + TEXTURE2 : number; + TEXTURE3 : number; + TEXTURE4 : number; + TEXTURE5 : number; + TEXTURE6 : number; + TEXTURE7 : number; + TEXTURE8 : number; + TEXTURE9 : number; + TEXTURE10 : number; + TEXTURE11 : number; + TEXTURE12 : number; + TEXTURE13 : number; + TEXTURE14 : number; + TEXTURE15 : number; + TEXTURE16 : number; + TEXTURE17 : number; + TEXTURE18 : number; + TEXTURE19 : number; + TEXTURE20 : number; + TEXTURE21 : number; + TEXTURE22 : number; + TEXTURE23 : number; + TEXTURE24 : number; + TEXTURE25 : number; + TEXTURE26 : number; + TEXTURE27 : number; + TEXTURE28 : number; + TEXTURE29 : number; + TEXTURE30 : number; + TEXTURE31 : number; + ACTIVE_TEXTURE : number; + REPEAT : number; + CLAMP_TO_EDGE : number; + MIRRORED_REPEAT : number; + FLOAT_VEC2 : number; + FLOAT_VEC3 : number; + FLOAT_VEC4 : number; + INT_VEC2 : number; + INT_VEC3 : number; + INT_VEC4 : number; + BOOL : number; + BOOL_VEC2 : number; + BOOL_VEC3 : number; + BOOL_VEC4 : number; + FLOAT_MAT2 : number; + FLOAT_MAT3 : number; + FLOAT_MAT4 : number; + SAMPLER_2D : number; + SAMPLER_CUBE : number; + VERTEX_ATTRIB_ARRAY_ENABLED : number; + VERTEX_ATTRIB_ARRAY_SIZE : number; + VERTEX_ATTRIB_ARRAY_STRIDE : number; + VERTEX_ATTRIB_ARRAY_TYPE : number; + VERTEX_ATTRIB_ARRAY_NORMALIZED : number; + VERTEX_ATTRIB_ARRAY_POINTER : number; + VERTEX_ATTRIB_ARRAY_BUFFER_BINDING : number; + COMPILE_STATUS : number; + INFO_LOG_LENGTH : number; + SHADER_SOURCE_LENGTH : number; + LOW_FLOAT : number; + MEDIUM_FLOAT : number; + HIGH_FLOAT : number; + LOW_INT : number; + MEDIUM_INT : number; + HIGH_INT : number; + FRAMEBUFFER : number; + RENDERBUFFER : number; + RGBA4 : number; + RGB5_A1 : number; + RGB565 : number; + DEPTH_COMPONENT16 : number; + STENCIL_INDEX : number; + STENCIL_INDEX8 : number; + DEPTH_STENCIL : number; + RENDERBUFFER_WIDTH : number; + RENDERBUFFER_HEIGHT : number; + RENDERBUFFER_INTERNAL_FORMAT : number; + RENDERBUFFER_RED_SIZE : number; + RENDERBUFFER_GREEN_SIZE : number; + RENDERBUFFER_BLUE_SIZE : number; + RENDERBUFFER_ALPHA_SIZE : number; + RENDERBUFFER_DEPTH_SIZE : number; + RENDERBUFFER_STENCIL_SIZE : number; + FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE : number; + FRAMEBUFFER_ATTACHMENT_OBJECT_NAME : number; + FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL : number; + FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE : number; + COLOR_ATTACHMENT0 : number; + DEPTH_ATTACHMENT : number; + STENCIL_ATTACHMENT : number; + DEPTH_STENCIL_ATTACHMENT : number; + NONE : number; + FRAMEBUFFER_COMPLETE : number; + FRAMEBUFFER_INCOMPLETE_ATTACHMENT : number; + FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT : number; + FRAMEBUFFER_INCOMPLETE_DIMENSIONS : number; + FRAMEBUFFER_UNSUPPORTED : number; + FRAMEBUFFER_BINDING : number; + RENDERBUFFER_BINDING : number; + MAX_RENDERBUFFER_SIZE : number; + INVALID_FRAMEBUFFER_OPERATION : number; + UNPACK_FLIP_Y_WEBGL : number; + UNPACK_PREMULTIPLY_ALPHA_WEBGL : number; + CONTEXT_LOST_WEBGL : number; + UNPACK_COLORSPACE_CONVERSION_WEBGL : number; + BROWSER_DEFAULT_WEBGL : number; + canvas : HTMLCanvasElement; + getContextAttributes() : WebGLContextAttributes; + isContextLost() : boolean; + getSupportedExtensions() : string[]; + getExtension(name : string) : any; + activeTexture(texture : number) : void; + attachShader(program : WebGLProgram, shader : WebGLShader) : void; + bindAttribLocation(program : WebGLProgram, index : number, name : string) : void; + bindBuffer(target : number, buffer : WebGLBuffer) : void; + bindFramebuffer(target : number, framebuffer : WebGLFramebuffer) : void; + bindRenderbuffer(target : number, renderbuffer : WebGLRenderbuffer) : void; + bindTexture(target : number, texture : WebGLTexture) : void; + blendColor(red : number, green : number, blue : number, alpha : number) : void; + blendEquation(mode : number) : void; + blendEquationSeparate(modeRGB : number, modeAlpha : number) : void; + blendFunc(sfactor : number, dfactor : number) : void; + blendFuncSeparate(srcRGB : number, dstRGB : number, srcAlpha : number, dstAlpha : number) : void; + bufferData(target : number, size : number, usage : number) : void; + bufferData(target : number, data : ArrayBufferView, usage : number) : void; + bufferData(target : number, data : ArrayBuffer, usage : number) : void; + bufferSubData(target : number, offset : number, data : ArrayBufferView) : void; + bufferSubData(target : number, offset : number, data : ArrayBuffer) : void; + checkFramebufferStatus(target : number) : number; + clear(mask : number) : void; + clearColor(red : number, green : number, blue : number, alpha : number) : void; + clearDepth(depth : number) : void; + clearStencil(s : number) : void; + colorMask(red : boolean, green : boolean, blue : boolean, alpha : boolean) : void; + compileShader(shader : WebGLShader) : void; + copyTexImage2D(target : number, level : number, internalformat : number, x : number, y : number, width : number, height : number, border : number) : void; + copyTexSubImage2D(target : number, level : number, xoffset : number, yoffset : number, x : number, y : number, width : number, height : number) : void; + createBuffer() : WebGLBuffer; + createFramebuffer() : WebGLFramebuffer; + createProgram() : WebGLProgram; + createRenderbuffer() : WebGLRenderbuffer; + createShader(type : number) : WebGLShader; + createTexture() : WebGLTexture; + cullFace(mode : number) : void; + deleteBuffer(buffer : WebGLBuffer) : void; + deleteFramebuffer(framebuffer : WebGLFramebuffer) : void; + deleteProgram(program : WebGLProgram) : void; + deleteRenderbuffer(renderbuffer : WebGLRenderbuffer) : void; + deleteShader(shader : WebGLShader) : void; + deleteTexture(texture : WebGLTexture) : void; + depthFunc(func : number) : void; + depthMask(flag : boolean) : void; + depthRange(zNear : number, zFar : number) : void; + detachShader(program : WebGLProgram, shader : WebGLShader) : void; + disable(cap : number) : void; + disableVertexAttribArray(index : number) : void; + drawArrays(mode : number, first : number, count : number) : void; + drawElements(mode : number, count : number, type : number, offset : number) : void; + enable(cap : number) : void; + enableVertexAttribArray(index : number) : void; + finish() : void; + flush() : void; + framebufferRenderbuffer(target : number, attachment : number, renderbuffertarget : number, renderbuffer : WebGLRenderbuffer) : void; + framebufferTexture2D(target : number, attachment : number, textarget : number, texture : WebGLTexture, level : number) : void; + frontFace(mode : number) : void; + generateMipmap(target : number) : void; + getActiveAttrib(program : WebGLProgram, index : number) : WebGLActiveInfo; + getActiveUniform(program : WebGLProgram, index : number) : WebGLActiveInfo; + getAttachedShaders(program : WebGLProgram) : WebGLShader[]; + getAttribLocation(program : WebGLProgram, name : string) : number; + getParameter(pname : number) : any; + getBufferParameter(target : number, pname : number) : any; + getError() : number; + getFramebufferAttachmentParameter(target : number, attachment : number, pname : number) : any; + getProgramParameter(program : WebGLProgram, pname : number) : any; + getProgramInfoLog(program : WebGLProgram) : string; + getRenderbufferParameter(target : number, pname : number) : any; + getShaderParameter(shader : WebGLShader, pname : number) : any; + getShaderInfoLog(shader : WebGLShader) : string; + getShaderSource(shader : WebGLShader) : string; + getTexParameter(target : number, pname : number) : any; + getUniform(program : WebGLProgram, location : WebGLUniformLocation) : any; + getUniformLocation(program : WebGLProgram, name : string) : WebGLUniformLocation; + getVertexAttrib(index : number, pname : number) : any; + getVertexAttribOffset(index : number, pname : number) : number; + hint(target : number, mode : number) : void; + isBuffer(buffer : WebGLBuffer) : boolean; + isEnabled(cap : number) : boolean; + isFramebuffer(framebuffer : WebGLFramebuffer) : boolean; + isProgram(program : WebGLProgram) : boolean; + isRenderbuffer(renderbuffer : WebGLRenderbuffer) : boolean; + isShader(shader : WebGLShader) : boolean; + isTexture(texture : WebGLTexture) : boolean; + lineWidth(width : number) : void; + linkProgram(program : WebGLProgram) : void; + pixelStorei(pname : number, param : number) : void; + polygonOffset(factor : number, units : number) : void; + readPixels(x : number, y : number, width : number, height : number, format : number, type : number, pixels : ArrayBufferView) : void; + renderbufferStorage(target : number, internalformat : number, width : number, height : number) : void; + sampleCoverage(value : number, invert : boolean) : void; + scissor(x : number, y : number, width : number, height : number) : void; + shaderSource(shader : WebGLShader, source : string) : void; + stencilFunc(func : number, ref : number, mask : number) : void; + stencilFuncSeparate(face : number, func : number, ref : number, mask : number) : void; + stencilMask(mask : number) : void; + stencilMaskSeparate(face : number, mask : number) : void; + stencilOp(fail : number, zfail : number, zpass : number) : void; + stencilOpSeparate(face : number, fail : number, zfail : number, zpass : number) : void; + texImage2D(target : number, level : number, internalformat : number, width : number, height : number, border : number, format : number, type : number, pixels : ArrayBufferView) : void; + texImage2D(target : number, level : number, internalformat : number, format : number, type : number, pixels : ImageData) : void; + texImage2D(target : number, level : number, internalformat : number, format : number, type : number, image : HTMLImageElement) : void; + texImage2D(target : number, level : number, internalformat : number, format : number, type : number, canvas : HTMLCanvasElement) : void; + texImage2D(target : number, level : number, internalformat : number, format : number, type : number, video : HTMLVideoElement) : void; + texParameterf(target : number, pname : number, param : number) : void; + texParameteri(target : number, pname : number, param : number) : void; + texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, width : number, height : number, format : number, type : number, pixels : ArrayBufferView) : void; + texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, pixels : ImageData) : void; + texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, image : HTMLImageElement) : void; + texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, canvas : HTMLCanvasElement) : void; + texSubImage2D(target : number, level : number, xoffset : number, yoffset : number, format : number, type : number, video : HTMLVideoElement) : void; + uniform1f(location : WebGLUniformLocation, x : number) : void; + uniform1fv(location : WebGLUniformLocation, v : Float32Array) : void; + uniform1fv(location : WebGLUniformLocation, v : number[]) : void; + uniform1i(location : WebGLUniformLocation, x : number) : void; + uniform1iv(location : WebGLUniformLocation, v : Int32Array) : void; + uniform1iv(location : WebGLUniformLocation, v : number[]) : void; + uniform2f(location : WebGLUniformLocation, x : number, y : number) : void; + uniform2fv(location : WebGLUniformLocation, v : Float32Array) : void; + uniform2fv(location : WebGLUniformLocation, v : number[]) : void; + uniform2i(location : WebGLUniformLocation, x : number, y : number) : void; + uniform2iv(location : WebGLUniformLocation, v : Int32Array) : void; + uniform2iv(location : WebGLUniformLocation, v : number[]) : void; + uniform3f(location : WebGLUniformLocation, x : number, y : number, z : number) : void; + uniform3fv(location : WebGLUniformLocation, v : Float32Array) : void; + uniform3fv(location : WebGLUniformLocation, v : number[]) : void; + uniform3i(location : WebGLUniformLocation, x : number, y : number, z : number) : void; + uniform3iv(location : WebGLUniformLocation, v : Int32Array) : void; + uniform3iv(location : WebGLUniformLocation, v : number[]) : void; + uniform4f(location : WebGLUniformLocation, x : number, y : number, z : number, w : number) : void; + uniform4fv(location : WebGLUniformLocation, v : Float32Array) : void; + uniform4fv(location : WebGLUniformLocation, v : number[]) : void; + uniform4i(location : WebGLUniformLocation, x : number, y : number, z : number, w : number) : void; + uniform4iv(location : WebGLUniformLocation, v : Int32Array) : void; + uniform4iv(location : WebGLUniformLocation, v : number[]) : void; + uniformMatrix2fv(location : WebGLUniformLocation, transpose : boolean, value : Float32Array) : void; + uniformMatrix2fv(location : WebGLUniformLocation, transpose : boolean, value : number[]) : void; + uniformMatrix3fv(location : WebGLUniformLocation, transpose : boolean, value : Float32Array) : void; + uniformMatrix3fv(location : WebGLUniformLocation, transpose : boolean, value : number[]) : void; + uniformMatrix4fv(location : WebGLUniformLocation, transpose : boolean, value : Float32Array) : void; + uniformMatrix4fv(location : WebGLUniformLocation, transpose : boolean, value : number[]) : void; + useProgram(program : WebGLProgram) : void; + validateProgram(program : WebGLProgram) : void; + vertexAttrib1f(indx : number, x : number) : void; + vertexAttrib1fv(indx : number, values : Float32Array) : void; + vertexAttrib1fv(indx : number, values : number[]) : void; + vertexAttrib2f(indx : number, x : number, y : number) : void; + vertexAttrib2fv(indx : number, values : Float32Array) : void; + vertexAttrib2fv(indx : number, values : number[]) : void; + vertexAttrib3f(indx : number, x : number, y : number, z : number) : void; + vertexAttrib3fv(indx : number, values : Float32Array) : void; + vertexAttrib3fv(indx : number, values : number[]) : void; + vertexAttrib4f(indx : number, x : number, y : number, z : number, w : number) : void; + vertexAttrib4fv(indx : number, values : Float32Array) : void; + vertexAttrib4fv(indx : number, values : number[]) : void; + vertexAttribPointer(indx : number, size : number, type : number, normalized : boolean, stride : number, offset : number) : void; + viewport(x : number, y : number, width : number, height : number) : void; +} + +interface WebGLContextEvent extends Event { + statusMessage : string; + initWebGLContextEvent(typeArg : string, canBubbleArg : boolean, cancelableArg : boolean, statusMessageArg : string) : void; +} + +//Extend the window object with cross Browser callbacks so TS will not complain +//Also add the (non-standard) Canvas Element parameter for performance improvement +interface WindowAnimationTiming { + requestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number; + //msRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number; + mozRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number; + webkitRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number; + oRequestAnimationFrame(callback: FrameRequestCallback, canvas ?: HTMLCanvasElement): number; + + cancelRequestAnimationFrame(handle: number): void; + //msCancelRequestAnimationFrame(handle: number): void; + mozCancelRequestAnimationFrame(handle: number): void; + webkitCancelRequestAnimationFrame(handle: number): void; + oCancelRequestAnimationFrame(handle: number): void; +} + +//To make WebGL work +interface HTMLCanvasElement { + getContext(contextId: string, params : {}): WebGLRenderingContext; +} \ No newline at end of file