public static void uploadBitmapData(bc.flash.display3D.textures.AsTexture nativeTexture, AsBitmapData data, bool generateMipmaps)
 {
     nativeTexture.uploadFromBitmapData(data);
     if(generateMipmaps && data.getWidth() > 1 && data.getHeight() > 1)
     {
         int currentWidth = data.getWidth() >> 1;
         int currentHeight = data.getHeight() >> 1;
         int level = 1;
         AsBitmapData canvas = new AsBitmapData(currentWidth, currentHeight, true, 0);
         AsMatrix transform = new AsMatrix(.5f, 0, 0, .5f);
         AsRectangle bounds = new AsRectangle();
         while(currentWidth >= 1 || currentHeight >= 1)
         {
             bounds.width = currentWidth;
             bounds.height = currentHeight;
             canvas.fillRect(bounds, (uint)(0));
             canvas.draw(data, transform, null, null, null, true);
             nativeTexture.uploadFromBitmapData(canvas, (uint)(level++));
             transform.scale(0.5f, 0.5f);
             currentWidth = currentWidth >> 1;
             currentHeight = currentHeight >> 1;
         }
         canvas.dispose();
     }
 }
 private void createRenderedContents()
 {
     if(mQuadBatch != null)
     {
         mQuadBatch.removeFromParent(true);
         mQuadBatch = null;
     }
     float scale = AsStarling.getContentScaleFactor();
     float width = mHitArea.getWidth() * scale;
     float height = mHitArea.getHeight() * scale;
     AsTextFormat textFormat = new AsTextFormat(mFontName, mFontSize * scale, mColor, mBold, mItalic, mUnderline, null, null, mHAlign);
     textFormat.setKerning(mKerning);
     sNativeTextField.setDefaultTextFormat(textFormat);
     sNativeTextField.setWidth(width);
     sNativeTextField.setHeight(height);
     sNativeTextField.setAntiAliasType(AsAntiAliasType.ADVANCED);
     sNativeTextField.setSelectable(false);
     sNativeTextField.setMultiline(true);
     sNativeTextField.setWordWrap(true);
     sNativeTextField.setText(mText);
     sNativeTextField.setEmbedFonts(true);
     sNativeTextField.setOwnProperty("filters", mNativeFilters);
     if(sNativeTextField.getTextWidth() == 0.0f || sNativeTextField.getTextHeight() == 0.0f)
     {
         sNativeTextField.setEmbedFonts(false);
     }
     if(mAutoScale)
     {
         autoScaleNativeTextField(sNativeTextField);
     }
     float textWidth = sNativeTextField.getTextWidth();
     float textHeight = sNativeTextField.getTextHeight();
     float xOffset = 0.0f;
     if(mHAlign == AsHAlign.LEFT)
     {
         xOffset = 2;
     }
     else
     {
         if(mHAlign == AsHAlign.CENTER)
         {
             xOffset = (width - textWidth) / 2.0f;
         }
         else
         {
             if(mHAlign == AsHAlign.RIGHT)
             {
                 xOffset = width - textWidth - 2;
             }
         }
     }
     float yOffset = 0.0f;
     if(mVAlign == AsVAlign.TOP)
     {
         yOffset = 2;
     }
     else
     {
         if(mVAlign == AsVAlign.CENTER)
         {
             yOffset = (height - textHeight) / 2.0f;
         }
         else
         {
             if(mVAlign == AsVAlign.BOTTOM)
             {
                 yOffset = height - textHeight - 2;
             }
         }
     }
     AsBitmapData bitmapData = new AsBitmapData(width, height, true, 0x0);
     bitmapData.draw(sNativeTextField, new AsMatrix(1, 0, 0, 1, 0, ((int)(yOffset)) - 2));
     sNativeTextField.setText("");
     if(mTextBounds == null)
     {
         mTextBounds = new AsRectangle();
     }
     mTextBounds.setTo(xOffset / scale, yOffset / scale, textWidth / scale, textHeight / scale);
     AsTexture texture = AsTexture.fromBitmapData(bitmapData, false, false, scale);
     if(mImage == null)
     {
         mImage = new AsImage(texture);
         mImage.setTouchable(false);
         addChild(mImage);
     }
     else
     {
         mImage.getTexture().dispose();
         mImage.setTexture(texture);
         mImage.readjustSize();
     }
 }