コード例 #1
0
        static void GLBlendSolidHSpan(
            int x1, int len, bool isFillMode, AggCoordList3f lineBuffer, int srcColorAlpha,
            byte[] covers, int coversIndex)
        {
            if (isFillMode)
            {
                unchecked
                {
                    int xpos = x1;
                    switch (len)
                    {
                    case 1:
                    {
                        lineBuffer.AddCoord(xpos - 1, 0);
                        //just one pix ,
                        //alpha change ***
                        int alpha = ((srcColorAlpha) * ((covers[coversIndex]) + 1)) >> 8;
                        //single px
                        lineBuffer.AddCoord(xpos, alpha);
                        xpos++;
                        coversIndex++;
                        //lineBuffer.AddCoord(xpos, 0);
                    } break;

                    default:
                    {
                        lineBuffer.AddCoord(xpos - 1, 0);
                        int alpha = 0;
                        do
                        {
                            //alpha change ***
                            alpha = ((srcColorAlpha) * ((covers[coversIndex]) + 1)) >> 8;
                            //single point
                            lineBuffer.AddCoord(xpos, alpha);
                            xpos++;
                            coversIndex++;
                        }while (--len != 0);
                        //close with single px
                        lineBuffer.AddCoord(xpos, 0);
                    } break;
                    }
                }
            }
            else
            {
                unchecked
                {
                    int xpos = x1;
                    switch (len)
                    {
                    case 1:
                    {
                        lineBuffer.AddCoord(xpos - 1, 0);

                        //just one pix ,
                        //alpha change ***
                        int alpha = ((srcColorAlpha) * ((covers[coversIndex]) + 1)) >> 8;
                        //single px
                        lineBuffer.AddCoord(xpos, alpha);

                        xpos++;
                        coversIndex++;

                        //lineBuffer.AddCoord(xpos, 0);
                    } break;

                    default:
                    {
                        lineBuffer.AddCoord(xpos - 1, 0);
                        int alpha = 0;
                        do
                        {
                            //alpha change ***
                            alpha = ((srcColorAlpha) * ((covers[coversIndex]) + 1)) >> 8;
                            //single point
                            lineBuffer.AddCoord(xpos, alpha);
                            xpos++;
                            coversIndex++;
                        }while (--len != 0);
                        //close with single px
                        lineBuffer.AddCoord(xpos, 0);
                    } break;
                    }
                }
            }
        }
コード例 #2
0
        static void GLBlendHLine(int x1, int x2, bool isFillMode, AggCoordList3f lineBuffer, int srcColorAlpha, byte cover)
        {
            //if (color.A == 0) { return; }

            int len   = x2 - x1 + 1;
            int alpha = (((int)(srcColorAlpha) * (cover + 1)) >> 8);

            if (isFillMode)
            {
                //same alpha...
                if (alpha == BASE_MASK)
                {
                    switch (len)
                    {
                    case 0:
                    {
                    } break;

                    case 1:
                    {
                        //single px
                        lineBuffer.AddCoord(x1 - 1, alpha);
                        lineBuffer.AddCoord(x1, alpha);
                        lineBuffer.AddCoord(x1 + 1, alpha);
                    } break;

                    default:
                    {
                        //var c = PixelFarm.Drawing.Color.FromArgb(alpha, color).ToARGB();
                        //lineBuffer.AddVertex(new VertexV2S1Cvr(x1, y, alpha));
                        //lineBuffer.AddVertex(new VertexV2S1Cvr(x2 + 1, y, alpha));
                        lineBuffer.AddCoord(x1 - 1, alpha);
                        lineBuffer.AddCoord(x1, alpha);
                        lineBuffer.AddCoord(x2 + 1, alpha);
                        //lineBuffer.AddCoord(x2 + 2, 0);
                        //lineBuffer.AddCoord(x2 + 2, 0);
                    } break;
                    }
                }
                else
                {
                    //same alpha
                    lineBuffer.AddCoord(x1 - 1, alpha);
                    lineBuffer.AddCoord(x1, alpha);
                    lineBuffer.AddCoord(x2 + 1, alpha);
                    //lineBuffer.AddCoord(x2 + 2, 0);
                }
            }
            else
            {
                //same alpha...
                if (alpha == BASE_MASK)
                {
                    switch (len)
                    {
                    case 0:
                    {
                    } break;

                    case 1:
                    {
                        //single px
                        lineBuffer.AddCoord(x1 - 1, 0);
                        lineBuffer.AddCoord(x1, alpha);
                        //lineBuffer.AddCoord(x1 + 1, alpha);
                    } break;

                    default:
                    {
                        //var c = PixelFarm.Drawing.Color.FromArgb(alpha, color).ToARGB();
                        //lineBuffer.AddVertex(new VertexV2S1Cvr(x1, y, alpha));
                        //lineBuffer.AddVertex(new VertexV2S1Cvr(x2 + 1, y, alpha));
                        lineBuffer.AddCoord(x1 - 1, 0);
                        lineBuffer.AddCoord(x1, alpha);
                        lineBuffer.AddCoord(x2 + 1, alpha);
                        lineBuffer.AddCoord(x2 + 2, 0);
                    } break;
                    }
                }
                else
                {
                    //same alpha
                    lineBuffer.AddCoord(x1 - 1, 0);
                    lineBuffer.AddCoord(x1, alpha);
                    lineBuffer.AddCoord(x2 + 1, alpha);
                    lineBuffer.AddCoord(x2 + 2, 0);
                }
            }
        }