<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>src/pixi/textures/RenderTexture.js - Pixi.JS</title> <link rel="stylesheet" href="http://yui.yahooapis.com/3.8.0/build/cssgrids/cssgrids-min.css"> <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css"> <link rel="stylesheet" href="../assets/css/main.css" id="site_styles"> <link rel="shortcut icon" type="image/png" href="../assets/favicon.png"> <script src="http://yui.yahooapis.com/combo?3.8.0/build/yui/yui-min.js"></script> </head> <body class="yui3-skin-sam"> <div id="doc"> <div id="hd" class="yui3-g header"> <div class="yui3-u-3-4"> <h1><img src="http://www.goodboydigital.com/pixijs/logo_small.png" title="Pixi.JS"></h1> </div> <div class="yui3-u-1-4 version"> <em>API Docs for: 1.0.0</em> </div> </div> <div id="bd" class="yui3-g"> <div class="yui3-u-1-4"> <div id="docs-sidebar" class="sidebar apidocs"> <div id="api-list"> <h2 class="off-left">APIs</h2> <div id="api-tabview" class="tabview"> <ul class="tabs"> <li><a href="#api-classes">Classes</a></li> <li><a href="#api-modules">Modules</a></li> </ul> <div id="api-tabview-filter"> <input type="search" id="api-filter" placeholder="Type to filter APIs"> </div> <div id="api-tabview-panel"> <ul id="api-classes" class="apis classes"> <li><a href="../classes/AssetLoader.html">AssetLoader</a></li> <li><a href="../classes/BaseTexture.html">BaseTexture</a></li> <li><a href="../classes/BitmapFontLoader.html">BitmapFontLoader</a></li> <li><a href="../classes/BitmapText.html">BitmapText</a></li> <li><a href="../classes/CanvasRenderer.html">CanvasRenderer</a></li> <li><a href="../classes/CustomRenderable.html">CustomRenderable</a></li> <li><a href="../classes/DisplayObject.html">DisplayObject</a></li> <li><a href="../classes/DisplayObjectContainer.html">DisplayObjectContainer</a></li> <li><a href="../classes/ImageLoader.html">ImageLoader</a></li> <li><a href="../classes/InteractionData.html">InteractionData</a></li> <li><a href="../classes/InteractionManager.html">InteractionManager</a></li> <li><a href="../classes/JsonLoader.html">JsonLoader</a></li> <li><a href="../classes/MovieClip.html">MovieClip</a></li> <li><a href="../classes/Point.html">Point</a></li> <li><a href="../classes/Polygon.html">Polygon</a></li> <li><a href="../classes/Rectangle.html">Rectangle</a></li> <li><a href="../classes/RenderTexture.html">RenderTexture</a></li> <li><a href="../classes/Spine.html">Spine</a></li> <li><a href="../classes/Sprite.html">Sprite</a></li> <li><a href="../classes/SpriteSheetLoader.html">SpriteSheetLoader</a></li> <li><a href="../classes/Stage.html">Stage</a></li> <li><a href="../classes/Text.html">Text</a></li> <li><a href="../classes/Texture.html">Texture</a></li> <li><a href="../classes/TilingSprite.html">TilingSprite</a></li> <li><a href="../classes/WebGLBatch.html">WebGLBatch</a></li> <li><a href="../classes/WebGLRenderer.html">WebGLRenderer</a></li> </ul> <ul id="api-modules" class="apis modules"> <li><a href="../modules/PIXI.html">PIXI</a></li> </ul> </div> </div> </div> </div> </div> <div class="yui3-u-3-4"> <div id="api-options"> Show: <label for="api-show-inherited"> <input type="checkbox" id="api-show-inherited" checked> Inherited </label> <label for="api-show-protected"> <input type="checkbox" id="api-show-protected"> Protected </label> <label for="api-show-private"> <input type="checkbox" id="api-show-private"> Private </label> <label for="api-show-deprecated"> <input type="checkbox" id="api-show-deprecated"> Deprecated </label> </div> <div class="apidocs"> <div id="docs-main"> <div class="content"> <h1 class="file-heading">File: src/pixi/textures/RenderTexture.js</h1> <div class="file"> <pre class="code prettyprint linenums"> /** * @author Mat Groves http://matgroves.com/ @Doormat23 */ /** * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. * @class RenderTexture * @extends Texture * @constructor * @param width {Number} * @param height {Number} */ PIXI.RenderTexture = function(width, height) { PIXI.EventTarget.call( this ); this.width = width || 100; this.height = height || 100; this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); if(PIXI.gl) { this.initWebGL(); } else { this.initCanvas(); } } PIXI.RenderTexture.constructor = PIXI.RenderTexture; PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); PIXI.RenderTexture.prototype.initWebGL = function() { var gl = PIXI.gl; this.glFramebuffer = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); this.glFramebuffer.width = this.width; this.glFramebuffer.height = this.height; this.baseTexture = new PIXI.BaseTexture(); this.baseTexture.width = this.width; this.baseTexture.height = this.height; this.baseTexture._glTexture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); this.baseTexture.isRender = true; gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); // create a projection matrix.. this.projectionMatrix = PIXI.mat4.create(); this.projectionMatrix[5] = 2/this.height// * 0.5; this.projectionMatrix[13] = -1; this.projectionMatrix[0] = 2/this.width; this.projectionMatrix[12] = -1; // set the correct render function.. this.render = this.renderWebGL; } PIXI.RenderTexture.prototype.initCanvas = function() { this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); this.baseTexture = new PIXI.BaseTexture(this.renderer.view); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); this.render = this.renderCanvas; } /** * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { var gl = PIXI.gl; // enable the alpha color mask.. gl.colorMask(true, true, true, true); gl.viewport(0, 0, this.width, this.height); gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); if(clear) { gl.clearColor(0,0,0, 0); gl.clear(gl.COLOR_BUFFER_BIT); } // THIS WILL MESS WITH HIT TESTING! var children = displayObject.children; //TODO -? create a new one??? dont think so! displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; for(var i=0,j=children.length; i<j; i++) { children[i].updateTransform(); } var renderGroup = displayObject.__renderGroup; if(renderGroup) { if(displayObject == renderGroup.root) { renderGroup.render(this.projectionMatrix); } else { renderGroup.renderSpecific(displayObject, this.projectionMatrix); } } else { if(!this.renderGroup)this.renderGroup = new PIXI.WebGLRenderGroup(gl); this.renderGroup.setRenderable(displayObject); this.renderGroup.render(this.projectionMatrix); } } PIXI.RenderTexture.prototype.renderCanvas = function(displayObject, clear) { var children = displayObject.children; displayObject.worldTransform = PIXI.mat3.create(); for(var i=0,j=children.length; i<j; i++) { children[i].updateTransform(); } if(clear)this.renderer.context.clearRect(0,0, this.width, this.height); this.renderer.renderDisplayObject(displayObject); PIXI.texturesToUpdate.push(this.baseTexture); } </pre> </div> </div> </div> </div> </div> </div> </div> <script src="../assets/vendor/prettify/prettify-min.js"></script> <script>prettyPrint();</script> <script src="../assets/js/yui-prettify.js"></script> <script src="../assets/../api.js"></script> <script src="../assets/js/api-filter.js"></script> <script src="../assets/js/api-list.js"></script> <script src="../assets/js/api-search.js"></script> <script src="../assets/js/apidocs.js"></script> </body> </html>