コード例 #1
0
 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();
     }
 }
コード例 #2
0
        public static AsTexture getTexture()
        {
            AsBitmapData bmpData  = new AsBitmapData(BITMAP_WIDTH, BITMAP_HEIGHT);
            AsByteArray  bmpBytes = new AsByteArray();
            int          numBytes = (int)(BITMAP_DATA.getLength());
            int          i        = 0;

            for (; i < numBytes; ++i)
            {
                bmpBytes.writeUnsignedInt((uint)(BITMAP_DATA[i]));
            }
            bmpBytes.uncompress();
            bmpData.setPixels(new AsRectangle(0, 0, BITMAP_WIDTH, BITMAP_HEIGHT), bmpBytes);
            return(AsTexture.fromBitmapData(bmpData, false));
        }
コード例 #3
0
        public static AsTexture fromColor(int width, int height, uint color, bool optimizeForRenderTexture, float scale)
        {
            if (scale <= 0)
            {
                scale = AsStarling.getContentScaleFactor();
            }
            AsBitmapData bitmapData = new AsBitmapData(width * scale, height * scale, true, color);
            AsTexture    texture    = fromBitmapData(bitmapData, false, optimizeForRenderTexture, scale);

            if (!AsStarling.getHandleLostContext())
            {
                bitmapData.dispose();
            }
            return(texture);
        }
コード例 #4
0
        public static AsTexture fromBitmapData(AsBitmapData data, bool generateMipMaps, bool optimizeForRenderTexture, float scale)
        {
            int          origWidth   = data.getWidth();
            int          origHeight  = data.getHeight();
            int          legalWidth  = AsGlobal.getNextPowerOfTwo(origWidth);
            int          legalHeight = AsGlobal.getNextPowerOfTwo(origHeight);
            AsContext3D  context     = AsStarling.getContext();
            AsBitmapData potData     = null;

            if (context == null)
            {
                throw new AsMissingContextError();
            }
            bc.flash.display3D.textures.AsTexture nativeTexture = context.createTexture(legalWidth, legalHeight, AsContext3DTextureFormat.BGRA, optimizeForRenderTexture);
            if (legalWidth > origWidth || legalHeight > origHeight)
            {
                potData = new AsBitmapData(legalWidth, legalHeight, true, 0);
                potData.copyPixels(data, data.getRect(), sOrigin);
                data = potData;
            }
            uploadBitmapData(nativeTexture, data, generateMipMaps);
            AsConcreteTexture concreteTexture = new AsConcreteTexture(nativeTexture, AsContext3DTextureFormat.BGRA, legalWidth, legalHeight, generateMipMaps, true, optimizeForRenderTexture, scale);

            if (AsStarling.getHandleLostContext())
            {
                concreteTexture.restoreOnLostContext(data);
            }
            else
            {
                if (potData != null)
                {
                    potData.dispose();
                }
            }
            if (origWidth == legalWidth && origHeight == legalHeight)
            {
                return(concreteTexture);
            }
            else
            {
                return(new AsSubTexture(concreteTexture, new AsRectangle(0, 0, origWidth / scale, origHeight / scale), true));
            }
        }
コード例 #5
0
        private void onContextCreated(AsEvent _event)
        {
            AsContext3D  context    = AsStarling.getContext();
            AsBitmapData bitmapData = mData as AsBitmapData;
            AsAtfData    atfData    = mData as AsAtfData;

            bc.flash.display3D.textures.AsTexture nativeTexture = null;
            if (bitmapData != null)
            {
                nativeTexture = context.createTexture(mWidth, mHeight, AsContext3DTextureFormat.BGRA, mOptimizedForRenderTexture);
                AsTexture.uploadBitmapData(nativeTexture, bitmapData, mMipMapping);
            }
            else
            {
                if (atfData != null)
                {
                    nativeTexture = context.createTexture(atfData.getWidth(), atfData.getHeight(), atfData.getFormat(), mOptimizedForRenderTexture);
                    AsTexture.uploadAtfData(nativeTexture, atfData.getData());
                }
            }
            mBase = nativeTexture;
        }
コード例 #6
0
 public virtual void drawToBitmapData(AsBitmapData destination)
 {
     throw new AsNotImplementedError();
 }
コード例 #7
0
 public virtual void drawBitmap(AsBitmapData bitmap, float alpha)
 {
     throw new AsNotImplementedError();
 }
コード例 #8
0
 public void uploadFromBitmapData(AsBitmapData source)
 {
     uploadFromBitmapData(source, (uint)(0));
 }
コード例 #9
0
 public void uploadFromBitmapData(AsBitmapData source, uint miplevel)
 {
     throw new AsNotImplementedError();
 }
コード例 #10
0
        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();
            }
        }
コード例 #11
0
 public void uploadFromBitmapData(AsBitmapData source, uint side, uint miplevel)
 {
 }
コード例 #12
0
 public static AsTexture fromBitmapData(AsBitmapData data, bool generateMipMaps, bool optimizeForRenderTexture)
 {
     return(fromBitmapData(data, generateMipMaps, optimizeForRenderTexture, 1));
 }
コード例 #13
0
 public static AsTexture fromBitmapData(AsBitmapData data)
 {
     return(fromBitmapData(data, true, false, 1));
 }
コード例 #14
0
 public static AsTexture fromBitmapData(AsBitmapData data, bool generateMipMaps)
 {
     return(fromBitmapData(data, generateMipMaps, false, 1));
 }