123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667 |
- /****************************************************************************
- Copyright (c) 2010-2012 cocos2d-x.org
- Copyright (c) 2008-2010 Ricardo Quesada
- Copyright (c) 2011 Zynga Inc.
- http://www.cocos2d-x.org
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- ****************************************************************************/
- /**
- * <p>A class that implements a Texture Atlas. <br />
- * Supported features: <br />
- * The atlas file can be a PNG, JPG. <br />
- * Quads can be updated in runtime <br />
- * Quads can be added in runtime <br />
- * Quads can be removed in runtime <br />
- * Quads can be re-ordered in runtime <br />
- * The TextureAtlas capacity can be increased or decreased in runtime.</p>
- * @class
- * @extends cc.Class
- */
- cc.TextureAtlas = cc.Class.extend(/** @lends cc.TextureAtlas# */{
- _indices:null,
- //0: vertex 1: indices
- _buffersVBO:null,
- //indicates whether or not the array buffer of the VBO needs to be updated
- _dirty:false,
- _capacity:0,
- _texture:null,
- _quads:null,
- _quadsArrayBuffer:null,
- _quadsWebBuffer:null,
- _quadsReader:null,
- ctor:function () {
- this._buffersVBO = [];
- },
- /**
- * Quantity of quads that are going to be drawn.
- * @return {Number}
- */
- getTotalQuads:function () {
- //return this._quads.length;
- return this._totalQuads;
- },
- /**
- * Quantity of quads that can be stored with the current texture atlas size
- * @return {Number}
- */
- getCapacity:function () {
- return this._capacity;
- },
- /**
- * Texture of the texture atlas
- * @return {Image}
- */
- getTexture:function () {
- return this._texture;
- },
- /**
- * @param {Image} texture
- */
- setTexture:function (texture) {
- this._texture = texture;
- },
- /**
- * specify if the array buffer of the VBO needs to be updated
- * @param {Boolean} dirty
- */
- setDirty:function (dirty) {
- this._dirty = dirty;
- },
- /**
- * whether or not the array buffer of the VBO needs to be updated
- * @returns {boolean}
- */
- isDirty:function () {
- return this._dirty;
- },
- /**
- * Quads that are going to be rendered
- * @return {Array}
- */
- getQuads:function () {
- return this._quads;
- },
- /**
- * @param {Array} quads
- */
- setQuads:function (quads) {
- this._quads = quads;
- //TODO need re-binding
- },
- _copyQuadsToTextureAtlas:function(quads, index){
- if(!quads)
- return;
- for(var i = 0; i < quads.length ; i++)
- this._setQuadToArray(quads[i], index + i);
- },
- _setQuadToArray: function (quad, index) {
- var locQuads = this._quads;
- if (!locQuads[index]) {
- locQuads[index] = new cc.V3F_C4B_T2F_Quad(quad.tl, quad.bl, quad.tr, quad.br, this._quadsArrayBuffer, index * cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT);
- return;
- }
- locQuads[index].bl = quad.bl;
- locQuads[index].br = quad.br;
- locQuads[index].tl = quad.tl;
- locQuads[index].tr = quad.tr;
- },
- /**
- * Description
- * @return {String}
- */
- description:function () {
- return '<cc.TextureAtlas | totalQuads =' + this._totalQuads + '>';
- },
- _setupIndices:function () {
- if (this._capacity === 0)
- return;
- var locIndices = this._indices, locCapacity = this._capacity;
- for (var i = 0; i < locCapacity; i++) {
- if (cc.TEXTURE_ATLAS_USE_TRIANGLE_STRIP) {
- locIndices[i * 6 + 0] = i * 4 + 0;
- locIndices[i * 6 + 1] = i * 4 + 0;
- locIndices[i * 6 + 2] = i * 4 + 2;
- locIndices[i * 6 + 3] = i * 4 + 1;
- locIndices[i * 6 + 4] = i * 4 + 3;
- locIndices[i * 6 + 5] = i * 4 + 3;
- } else {
- locIndices[i * 6 + 0] = i * 4 + 0;
- locIndices[i * 6 + 1] = i * 4 + 1;
- locIndices[i * 6 + 2] = i * 4 + 2;
- // inverted index. issue #179
- locIndices[i * 6 + 3] = i * 4 + 3;
- locIndices[i * 6 + 4] = i * 4 + 2;
- locIndices[i * 6 + 5] = i * 4 + 1;
- }
- }
- },
- _setupVBO:function () {
- var gl = cc.renderContext;
- //create WebGLBuffer
- this._buffersVBO[0] = gl.createBuffer();
- this._buffersVBO[1] = gl.createBuffer();
- this._quadsWebBuffer = gl.createBuffer();
- this._mapBuffers();
- },
- _mapBuffers:function () {
- var gl = cc.renderContext;
- gl.bindBuffer(gl.ARRAY_BUFFER, this._quadsWebBuffer);
- gl.bufferData(gl.ARRAY_BUFFER, this._quadsArrayBuffer, gl.DYNAMIC_DRAW);
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._buffersVBO[1]);
- gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this._indices, gl.STATIC_DRAW);
- //cc.CHECK_GL_ERROR_DEBUG();
- },
- /**
- * <p>Initializes a TextureAtlas with a filename and with a certain capacity for Quads.<br />
- * The TextureAtlas capacity can be increased in runtime.<br />
- * WARNING: Do not reinitialize the TextureAtlas because it will leak memory. </p>
- * @param {String} file
- * @param {Number} capacity
- * @return {Boolean}
- * @example
- * //example
- * var textureAtlas = new cc.TextureAtlas();
- * textureAtlas.initWithTexture("hello.png", 3);
- */
- initWithFile:function (file, capacity) {
- // retained in property
- var texture = cc.TextureCache.getInstance().addImage(file);
- if (texture)
- return this.initWithTexture(texture, capacity);
- else {
- cc.log("cocos2d: Could not open file: " + file);
- return false;
- }
- },
- /**
- * <p>Initializes a TextureAtlas with a previously initialized Texture2D object, and<br />
- * with an initial capacity for Quads.<br />
- * The TextureAtlas capacity can be increased in runtime.<br />
- * WARNING: Do not reinitialize the TextureAtlas because it will leak memory</p>
- * @param {Image} texture
- * @param {Number} capacity
- * @return {Boolean}
- * @example
- * //example
- * var texture = cc.TextureCache.getInstance().addImage("hello.png");
- * var textureAtlas = new cc.TextureAtlas();
- * textureAtlas.initWithTexture(texture, 3);
- */
- initWithTexture:function (texture, capacity) {
- if(!texture)
- throw "cc.TextureAtlas.initWithTexture():texture should be non-null";
- capacity = 0 | (capacity);
- this._capacity = capacity;
- this._totalQuads = 0;
- // retained in property
- this._texture = texture;
- // Re-initialization is not allowed
- this._quads = [];
- this._indices = new Uint16Array(capacity * 6);
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- this._quadsArrayBuffer = new ArrayBuffer(quadSize * capacity);
- this._quadsReader = new Uint8Array(this._quadsArrayBuffer);
- if (!( this._quads && this._indices) && capacity > 0)
- return false;
- var locQuads = this._quads;
- for(var i = 0; i< capacity; i++)
- locQuads[i] =new cc.V3F_C4B_T2F_Quad(null, null, null, null, this._quadsArrayBuffer, i * quadSize);
- this._setupIndices();
- this._setupVBO();
- this._dirty = true;
- return true;
- },
- /**
- * <p>Updates a Quad (texture, vertex and color) at a certain index <br />
- * index must be between 0 and the atlas capacity - 1 </p>
- * @param {cc.V2F_C4B_T2F_Quad} quad
- * @param {Number} index
- */
- updateQuad:function (quad, index) {
- if(!quad)
- throw "cc.TextureAtlas.updateQuad(): quad should be non-null";
- if((index < 0) || (index >= this._capacity))
- throw "cc.TextureAtlas.updateQuad(): Invalid index";
- this._totalQuads = Math.max(index + 1, this._totalQuads);
- this._setQuadToArray(quad, index);
- this._dirty = true;
- },
- /**
- * <p>Inserts a Quad (texture, vertex and color) at a certain index<br />
- * index must be between 0 and the atlas capacity - 1 </p>
- * @param {cc.V2F_C4B_T2F_Quad} quad
- * @param {Number} index
- */
- insertQuad:function (quad, index) {
- if(index >= this._capacity)
- throw "cc.TextureAtlas.insertQuad(): Invalid index";
- this._totalQuads++;
- if(this._totalQuads > this._capacity) {
- cc.log("cc.TextureAtlas.insertQuad(): invalid totalQuads");
- return;
- }
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- // issue #575. index can be > totalQuads
- var remaining = (this._totalQuads-1) - index;
- var startOffset = index * quadSize;
- var moveLength = remaining * quadSize;
- this._quads[this._totalQuads -1] = new cc.V3F_C4B_T2F_Quad(null, null, null, null, this._quadsArrayBuffer, (this._totalQuads -1) * quadSize);
- this._quadsReader.set(this._quadsReader.subarray(startOffset, startOffset + moveLength), startOffset + quadSize);
- this._setQuadToArray(quad, index);
- this._dirty = true;
- },
- /**
- * <p>
- * Inserts a c array of quads at a given index <br />
- * index must be between 0 and the atlas capacity - 1 <br />
- * this method doesn't enlarge the array when amount + index > totalQuads <br />
- * </p>
- * @param {Array} quads
- * @param {Number} index
- * @param {Number} amount
- */
- insertQuads:function (quads, index, amount) {
- amount = amount || quads.length;
- if((index + amount) > this._capacity)
- throw "cc.TextureAtlas.insertQuad(): Invalid index + amount";
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- this._totalQuads += amount;
- if(this._totalQuads > this._capacity) {
- cc.log("cc.TextureAtlas.insertQuad(): invalid totalQuads");
- return;
- }
- // issue #575. index can be > totalQuads
- var remaining = (this._totalQuads-1) - index - amount;
- var startOffset = index * quadSize;
- var moveLength = remaining * quadSize;
- var lastIndex = (this._totalQuads-1) - amount;
- var i;
- for(i = 0; i < amount;i++)
- this._quads[lastIndex + i] = new cc.V3F_C4B_T2F_Quad(null, null, null, null, this._quadsArrayBuffer, (this._totalQuads -1) * quadSize);
- this._quadsReader.set(this._quadsReader.subarray(startOffset, startOffset + moveLength), startOffset + quadSize * amount);
- for(i = 0; i < amount; i++)
- this._setQuadToArray(quads[i], index + i);
- this._dirty = true;
- },
- /**
- * <p>Removes the quad that is located at a certain index and inserts it at a new index <br />
- * This operation is faster than removing and inserting in a quad in 2 different steps</p>
- * @param {Number} fromIndex
- * @param {Number} newIndex
- */
- insertQuadFromIndex:function (fromIndex, newIndex) {
- if (fromIndex === newIndex)
- return;
- if(newIndex < 0 && newIndex >= this._totalQuads)
- throw "cc.TextureAtlas.insertQuadFromIndex(): Invalid newIndex";
- if(fromIndex < 0 && fromIndex >= this._totalQuads)
- throw "cc.TextureAtlas.insertQuadFromIndex(): Invalid fromIndex";
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- var locQuadsReader = this._quadsReader;
- var sourceArr = locQuadsReader.subarray(fromIndex * quadSize,quadSize);
- var startOffset, moveLength;
- if(fromIndex > newIndex){
- startOffset = newIndex * quadSize;
- moveLength = (fromIndex - newIndex) * quadSize;
- locQuadsReader.set(locQuadsReader.subarray(startOffset, startOffset + moveLength),startOffset + quadSize);
- locQuadsReader.set(sourceArr,startOffset);
- }else{
- startOffset = (fromIndex + 1) * quadSize;
- moveLength = (newIndex - fromIndex) * quadSize;
- locQuadsReader.set(locQuadsReader.subarray(startOffset, startOffset + moveLength),startOffset - quadSize);
- locQuadsReader.set(sourceArr, newIndex * quadSize);
- }
- this._dirty = true;
- },
- /**
- * <p>Removes a quad at a given index number.<br />
- * The capacity remains the same, but the total number of quads to be drawn is reduced in 1 </p>
- * @param {Number} index
- */
- removeQuadAtIndex:function (index) {
- if(index >= this._totalQuads)
- throw "cc.TextureAtlas.removeQuadAtIndex(): Invalid index";
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- this._totalQuads--;
- this._quads.length = this._totalQuads;
- if(index !== this._totalQuads){
- //move data
- var startOffset = (index + 1) * quadSize;
- var moveLength = (this._totalQuads - index) * quadSize;
- this._quadsReader.set(this._quadsReader.subarray(startOffset, startOffset + moveLength), startOffset - quadSize);
- }
- this._dirty = true;
- },
- removeQuadsAtIndex:function (index, amount) {
- if(index + amount > this._totalQuads)
- throw "cc.TextureAtlas.removeQuadsAtIndex(): index + amount out of bounds";
- this._totalQuads -= amount;
- if(index !== this._totalQuads){
- //move data
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- var srcOffset = (index + amount) * quadSize;
- var moveLength = (this._totalQuads - index) * quadSize;
- var dstOffset = index * quadSize;
- this._quadsReader.set(this._quadsReader.subarray(srcOffset,srcOffset + moveLength),dstOffset);
- }
- this._dirty = true;
- },
- /**
- * <p>Removes all Quads. <br />
- * The TextureAtlas capacity remains untouched. No memory is freed.<br />
- * The total number of quads to be drawn will be 0</p>
- */
- removeAllQuads:function () {
- this._quads.length = 0;
- this._totalQuads = 0;
- },
- _setDirty:function(dirty){
- this._dirty = dirty;
- },
- /**
- * <p>Resize the capacity of the CCTextureAtlas.<br />
- * The new capacity can be lower or higher than the current one<br />
- * It returns YES if the resize was successful. <br />
- * If it fails to resize the capacity it will return NO with a new capacity of 0. <br />
- * no used for js</p>
- * @param {Number} newCapacity
- * @return {Boolean}
- */
- resizeCapacity:function (newCapacity) {
- if (newCapacity == this._capacity)
- return true;
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- var oldCapacity = this._capacity;
- // update capacity and totolQuads
- this._totalQuads = Math.min(this._totalQuads, newCapacity);
- this._capacity = 0 | newCapacity;
- var i, capacity = this._capacity, locTotalQuads = this._totalQuads;
- if (this._quads == null) {
- this._quads = [];
- this._quadsArrayBuffer = new ArrayBuffer(quadSize * capacity);
- this._quadsReader = new Uint8Array(this._quadsArrayBuffer);
- for(i = 0; i< capacity; i++)
- this._quads = new cc.V3F_C4B_T2F_Quad(null, null, null, null, this._quadsArrayBuffer,i * quadSize);
- } else {
- var newQuads, newArrayBuffer, quads = this._quads;
- if (capacity > oldCapacity) {
- newQuads = [];
- newArrayBuffer = new ArrayBuffer(quadSize * capacity);
- for(i = 0; i < locTotalQuads;i++){
- newQuads[i] = new cc.V3F_C4B_T2F_Quad(quads[i].tl,quads[i].bl,quads[i].tr,quads[i].br,
- newArrayBuffer,i * quadSize);
- }
- for(;i<capacity; i ++)
- newQuads[i] = new cc.V3F_C4B_T2F_Quad(null,null,null,null, newArrayBuffer,i * quadSize);
- this._quadsReader = new Uint8Array(newArrayBuffer);
- this._quads = newQuads;
- this._quadsArrayBuffer = newArrayBuffer;
- } else {
- var count = Math.max(locTotalQuads, capacity);
- newQuads = [];
- newArrayBuffer = new ArrayBuffer(quadSize * capacity);
- for(i = 0; i < count;i++){
- newQuads[i] = new cc.V3F_C4B_T2F_Quad(quads[i].tl,quads[i].bl,quads[i].tr,quads[i].br,
- newArrayBuffer,i * quadSize);
- }
- this._quadsReader = new Uint8Array(newArrayBuffer);
- this._quads = newQuads;
- this._quadsArrayBuffer = newArrayBuffer;
- }
- }
- if (this._indices == null) {
- this._indices = new Uint16Array(capacity * 6);
- } else {
- if (capacity > oldCapacity) {
- var tempIndices = new Uint16Array(capacity * 6);
- tempIndices.set(this._indices, 0);
- this._indices = tempIndices;
- } else {
- this._indices = this._indices.subarray(0, capacity * 6);
- }
- }
- this._setupIndices();
- this._mapBuffers();
- this._dirty = true;
- return true;
- },
- /**
- * Used internally by CCParticleBatchNode <br/>
- * don't use this unless you know what you're doing
- * @param {Number} amount
- */
- increaseTotalQuadsWith:function (amount) {
- this._totalQuads += amount;
- },
- /**
- * Moves an amount of quads from oldIndex at newIndex
- * @param {Number} oldIndex
- * @param {Number} amount
- * @param {Number} newIndex
- */
- moveQuadsFromIndex: function (oldIndex, amount, newIndex) {
- if (newIndex === undefined) {
- newIndex = amount;
- amount = this._totalQuads - oldIndex;
- if((newIndex + (this._totalQuads - oldIndex)) > this._capacity)
- throw "cc.TextureAtlas.moveQuadsFromIndex(): move is out of bounds";
- if(amount === 0)
- return;
- }else{
- if((newIndex + amount) > this._totalQuads)
- throw "cc.TextureAtlas.moveQuadsFromIndex(): Invalid newIndex";
- if(oldIndex >= this._totalQuads)
- throw "cc.TextureAtlas.moveQuadsFromIndex(): Invalid oldIndex";
- if (oldIndex == newIndex)
- return;
- }
- var quadSize = cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- var srcOffset = oldIndex * quadSize;
- var srcLength = amount * quadSize;
- var locQuadsReader = this._quadsReader;
- var sourceArr = locQuadsReader.subarray(srcOffset, srcOffset + srcLength);
- var dstOffset = newIndex * quadSize;
- var moveLength, moveStart;
- if (newIndex < oldIndex) {
- moveLength = (oldIndex - newIndex) * quadSize;
- moveStart = newIndex * quadSize;
- locQuadsReader.set(locQuadsReader.subarray(moveStart, moveStart + moveLength), moveStart + srcLength)
- } else {
- moveLength = (newIndex - oldIndex) * quadSize;
- moveStart = (oldIndex + amount) * quadSize;
- locQuadsReader.set(locQuadsReader.subarray(moveStart, moveStart + moveLength), srcOffset);
- }
- locQuadsReader.set(sourceArr, dstOffset);
- this._dirty = true;
- },
- /**
- * Ensures that after a realloc quads are still empty <br/>
- * Used internally by CCParticleBatchNode
- * @param {Number} index
- * @param {Number} amount
- */
- fillWithEmptyQuadsFromIndex:function (index, amount) {
- var count = amount * cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT;
- var clearReader = new Uint8Array(this._quadsArrayBuffer, index * cc.V3F_C4B_T2F_Quad.BYTES_PER_ELEMENT, count);
- for (var i = 0; i < count; i++)
- clearReader[i] = 0;
- },
- // TextureAtlas - Drawing
- /**
- * <p>Draws n quads from an index (offset). <br />
- * n + start can't be greater than the capacity of the atlas</p>
- * @param {Number} n
- * @param {Number} start
- */
- drawNumberOfQuads:function (n, start) {
- start = start || 0;
- if (0 === n || !this._texture || !this._texture.isLoaded())
- return;
- var gl = cc.renderContext;
- cc.glBindTexture2D(this._texture);
- //
- // Using VBO without VAO
- //
- //vertices
- //gl.bindBuffer(gl.ARRAY_BUFFER, this._buffersVBO[0]);
- // XXX: update is done in draw... perhaps it should be done in a timer
- cc.glEnableVertexAttribs(cc.VERTEX_ATTRIB_FLAG_POS_COLOR_TEX);
- gl.bindBuffer(gl.ARRAY_BUFFER, this._quadsWebBuffer);
- if (this._dirty)
- gl.bufferData(gl.ARRAY_BUFFER, this._quadsArrayBuffer, gl.DYNAMIC_DRAW);
- gl.vertexAttribPointer(cc.VERTEX_ATTRIB_POSITION, 3, gl.FLOAT, false, 24, 0); // vertices
- gl.vertexAttribPointer(cc.VERTEX_ATTRIB_COLOR, 4, gl.UNSIGNED_BYTE, true, 24, 12); // colors
- gl.vertexAttribPointer(cc.VERTEX_ATTRIB_TEX_COORDS, 2, gl.FLOAT, false, 24, 16); // tex coords
- if (this._dirty)
- this._dirty = false;
- gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._buffersVBO[1]);
- if (cc.TEXTURE_ATLAS_USE_TRIANGLE_STRIP)
- gl.drawElements(gl.TRIANGLE_STRIP, n * 6, gl.UNSIGNED_SHORT, start * 6 * this._indices.BYTES_PER_ELEMENT);
- else
- gl.drawElements(gl.TRIANGLES, n * 6, gl.UNSIGNED_SHORT, start * 6 * this._indices.BYTES_PER_ELEMENT);
- cc.g_NumberOfDraws++;
- //cc.CHECK_GL_ERROR_DEBUG();
- },
- /**
- * Draws all the Atlas's Quads
- */
- drawQuads:function () {
- this.drawNumberOfQuads(this._totalQuads, 0);
- },
- _releaseBuffer: function () {
- var gl = cc.renderContext;
- if (this._buffersVBO) {
- if (this._buffersVBO[0])
- gl.deleteBuffer(this._buffersVBO[0]);
- if (this._buffersVBO[1])
- gl.deleteBuffer(this._buffersVBO[1])
- }
- if (this._quadsWebBuffer)
- gl.deleteBuffer(this._quadsWebBuffer);
- }
- });
- /**
- * <p>Creates a TextureAtlas with an filename and with an initial capacity for Quads. <br />
- * The TextureAtlas capacity can be increased in runtime. </p>
- * @param {String} file
- * @param {Number} capacity
- * @return {cc.TextureAtlas|Null}
- * @example
- * //example
- * var textureAtlas = cc.TextureAtlas.create("hello.png", 3);
- */
- cc.TextureAtlas.create = function (file, capacity) {
- var textureAtlas = new cc.TextureAtlas();
- if (textureAtlas && textureAtlas.initWithFile(file, capacity))
- return textureAtlas;
- return null;
- };
- /**
- * <p>Creates a TextureAtlas with a previously initialized Texture2D object, and with an initial capacity for n Quads.
- * The TextureAtlas capacity can be increased in runtime.</p>
- * @param {Image|cc.Texture2D} texture
- * @param {Number} capacity
- * @return {cc.TextureAtlas}
- * @example
- * //example
- * var texture = cc.TextureCache.getInstance().addImage("hello.png");
- * var textureAtlas = cc.TextureAtlas.createWithTexture(texture, 3);
- */
- cc.TextureAtlas.createWithTexture = function (texture, capacity) {
- var textureAtlas = new cc.TextureAtlas();
- if (textureAtlas && textureAtlas.initWithTexture(texture, capacity))
- return textureAtlas;
- return null;
- };
|