Changeset 3477

Show
Ignore:
Timestamp:
12/23/07 15:27:50 (13 months ago)
Author:
gyuque
Message:

lang/legacy-actionscript/as2draw: indexed pixel buffer

Location:
lang/legacy-actionscript/as2draw
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/legacy-actionscript/as2draw/Drawable.as

    r3466 r3477  
    4848        public function removeTopLayer():Void 
    4949        { 
     50                //mPixBuf.dumpBuffer(); 
    5051                mMStack.pop(); 
    5152        } 
  • lang/legacy-actionscript/as2draw/PixelBuffer.as

    r3465 r3477  
    2424                for (i = 0;i < 16;i++) 
    2525                { 
    26                         if (0 == (w >> i)) break; 
    27                 } 
    28                 if (i == 0) throw "pixbuf width too big"; 
     26                        if (0 == ((w>>2) >> i)) break; 
     27                } 
     28                if (i == 16) throw "pixbuf width too big"; 
    2929 
    3030                mStrideShift = i; 
    31                 mStride = 1 << i; 
     31                mStride = 1 << mStrideShift; 
    3232        } 
    3333         
     
    3636                mOut = aMC; 
    3737        } 
    38 /* 
     38 
    3939        public function setPixel(x:Number, y:Number, k:Number) 
    4040        { 
    4141                if (x<0 || x>=mWidth || y<0) return; 
    42                 mBuf[ (y<<mStrideShift) + x ] = k; 
    43                 //var i:Number = (y<<mStrideShift) + x; 
    44         } 
    45 */ 
     42                var ADDR = (y<<mStrideShift) | (x>>2); 
     43                mBuf[ADDR] &= ~(0x000f << ((x&0x3) << 2)); 
     44                mBuf[ADDR] |= k << ((x&0x3) << 2); 
     45        } 
     46 
    4647         
    4748        public function dumpBuffer() 
    48         { 
    49                  
     49        {/* 
     50                var a:Array = []; 
     51                var c = 0; 
     52                for (var i in mBuf) 
     53                { 
     54                        c++; 
     55                        a.push("\"" +i+"\":"+mBuf[i]); 
     56                } 
     57                jp.javac.tools.JTracer.trace("{\"stride\": " +mStride+ ","); 
     58                jp.javac.tools.JTracer.trace("\"count\": " +c+ ","); 
     59                jp.javac.tools.JTracer.trace("\"data\": {"+a.join(",")+"}\n}");*/ 
    5060        } 
    5161         
     
    117127                } 
    118128 
     129                var ADDR; 
    119130                for (var i:Number = 0;i < mCount;i++) 
    120131                { 
    121132                        //setPixel(mSX, mSY, aData); 
    122133                        if (mSX>=0 && mSX<mWidth && mSY>=0); 
    123                                 mBuf[ (mSY<<mStrideShift) + mSX ] = aData; 
     134                        { 
     135                                ADDR = (mSY<<mStrideShift) | (mSX>>2); 
     136                                mBuf[ADDR] &= ~(0x000f << ((mSX&0x3) << 2)); 
     137                                mBuf[ADDR] |= aData << ((mSX&0x3) << 2); 
     138                        } 
    124139                         
    125140                        mSX += dx;