Show
Ignore:
Timestamp:
12/20/07 16:43:26 (13 months ago)
Author:
gyuque
Message:

lang/legacy-actionscript/as2draw: tuned line rendering algorithm... comparing with native API.

Files:
1 modified

Legend:

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

    r3346 r3350  
    4242        private var mDir; 
    4343        private var mCount; 
     44         
    4445        public function begin(aX:Number, aY:Number, aDir:Number) 
    4546        { 
     
    5556        } 
    5657 
    57         public function commit(aData:Number) 
     58        public function commit(aData:Number, aOutColor:Number) 
    5859        { 
     60                if (mCount == 0) 
     61                        return; 
     62 
    5963                var dx:Number; 
    6064                var dy:Number; 
    6165 
     66                mOut.lineStyle(1, aOutColor); 
     67                 
    6268                switch(mDir) { 
    6369                case 0: 
    6470                        dx = 0; dy = -1; 
    65                         U.rect(mOut, mSX, mSY-mCount, 1, mCount); 
     71                        mOut.moveTo(mSX, mSY-mCount); 
     72                        mOut.lineTo(mSX, mSY); 
    6673                        break; 
    6774                case 1: 
    6875                        dx = 1; dy = 0; 
    69                         U.rect(mOut, mSX, mSY, mCount, 1); 
     76                        mOut.moveTo(mSX       , mSY); 
     77                        mOut.lineTo(mSX+mCount, mSY); 
    7078                        break; 
    7179                case 2: 
    7280                        dx = 0; dy = 1; 
    73                         U.rect(mOut, mSX, mSY, 1, mCount); 
     81                        mOut.moveTo(mSX, mSY); 
     82                        mOut.lineTo(mSX, mSY+mCount); 
    7483                        break; 
    7584                case 3: 
    7685                        dx = -1; dy = 0; 
    77                         U.rect(mOut, mSX-mCount, mSY, mCount, 1); 
     86                        mOut.moveTo(mSX-mCount, mSY); 
     87                        mOut.lineTo(mSX       , mSY); 
    7888                        break; 
    7989                } 
     90                //mOut.moveTo(0,0); 
    8091 
    8192                for (var i:Number = 0;i < mCount;i++) 
     
    89100 
    90101 
    91         public function drawLine(x1:Number, y1:Number, x2:Number, y2:Number, c:Number) 
     102        public function drawLine(x1:Number, y1:Number, x2:Number, y2:Number, c:Number, outc:Number) 
    92103        { 
    93104                x1 = Math.floor(x1); 
     
    100111                var dy:Number = Math.abs(y2 - y1); 
    101112                 
    102                 E = 0; 
    103                  
    104113                var x:Number; 
    105114                var y:Number; 
     
    109118                if(dx > dy) 
    110119                { 
     120                        E = dx/2; 
    111121                        if (x2 < x1) 
    112122                        { 
     
    127137                                        E -= dx; 
    128138                                        y += step; 
    129                                         commit(c); 
     139                                        commit(c, outc); 
    130140                                        begin(x+1, y, 1); 
    131141                                }                                        
    132142                        } 
    133                         commit(c); 
     143                        commit(c, outc); 
    134144                } 
    135145                else 
    136146                { 
     147                        E = dy/2; 
    137148                        if (y2 < y1) 
    138149                        { 
     
    155166                                        E -= dy; 
    156167                                        x += step; 
    157                                         commit(c); 
     168                                        commit(c, outc); 
    158169                                        begin(x, y+1, 2); 
    159170                                } 
    160171                        } 
    161                         commit(c); 
     172                        commit(c, outc); 
    162173                } 
    163174        } 
    164175} 
     176