addQuad(texture, x, y, w, h, u0, v0, u1, v1, tint, reupload = false) {
		const vertexData = this.vertexData;

		if (vertexData.isFull(6)) {
			// is the vertex buffer full if we add 6 more vertices
			this.flush();
		}

		// upload and activate the texture if necessary
		const unit = this.uploadTexture(texture, w, h, reupload);

		// set fragment sampler accordingly
		this.currentShader.setUniform("uSampler", unit);

		// Transform vertices
		const m = this.viewMatrix;
		const vec0 = V_ARRAY[0].set(x, y);
		const vec1 = V_ARRAY[1].set(x + w, y);
		const vec2 = V_ARRAY[2].set(x, y + h);
		const vec3 = V_ARRAY[3].set(x + w, y + h);

		if (!m.isIdentity()) {
			m.apply(vec0);
			m.apply(vec1);
			m.apply(vec2);
			m.apply(vec3);
		}

		vertexData.push(vec0.x, vec0.y, u0, v0, tint);
		vertexData.push(vec1.x, vec1.y, u1, v0, tint);
		vertexData.push(vec2.x, vec2.y, u0, v1, tint);
		vertexData.push(vec2.x, vec2.y, u0, v1, tint);
		vertexData.push(vec1.x, vec1.y, u1, v0, tint);
		vertexData.push(vec3.x, vec3.y, u1, v1, tint);
	}
Add a textured quad
@param {TextureAtlas} texture - Source texture atlas
@param {number} x - Destination x-coordinate
@param {number} y - Destination y-coordinate
@param {number} w - Destination width
@param {number} h - Destination height
@param {number} u0 - Texture UV (u0) value.
@param {number} v0 - Texture UV (v0) value.
@param {number} u1 - Texture UV (u1) value.
@param {number} v1 - Texture UV (v1) value.
@param {number} tint - tint color to be applied to the texture in UINT32 (argb) format
@param {boolean} reupload - Force the texture to be reuploaded even if already bound