⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 render_rend.c.svn-base

📁 A Flash Player with ActionScript support. Write in C and C++. It have two part, one is Player and an
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
                    if((point1<ppmax)&&(point1>ppmin))                        *point1=(((TYPE)ramp[v].pixel)&0x00FFFFFF)|(((end_alpha)<<24)&(0xFF000000));                    //*point1 = mix_alpha(*point, (TYPE)ramp[v].pixel, end_alpha);                    //*point1=*point;                }#endif /* FULL_AA */            } else {                while (n--) {                    v = r>>16;                    if (v < 0)                        v = 0;                    else if (v > 255)                        v = 255;                    cp = &ramp[v];                    if((point1<ppmax)&&(point1>ppmin))                        *point1=((cp->pixel)&0x00FFFFFF)|(((cp->Alpha)<<24)&(0xFF000000));                    // *point1 = mix_alpha(*point, cp->pixel, cp->Alpha);                    //*point1=*point;                    point1++;                    r += dr;                }            }        }    } else        if(gmaskflag) {            {                struct MaskEntry *currentmaskentry;                unsigned char *currentmaskpointer;                currentmaskentry=player_p->_level0_p->mask_stack_p;                currentmaskpointer=currentmaskentry->maskpointer;                start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));                end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);                //printf("start_alpha is %d end_alpha is %d\n",start_alpha,end_alpha);                start /= FRAC;                end /= FRAC;                n = end-start;                //printf("n is %ld \n",n);                r = (long) (m->ScaleX * start + m->RotateSkew0 * y + m->TranslateX);                //printf("r is %ld \n",r);                dr = (long) (m->ScaleX);                //printf("dr is %ld \n",dr);                ramp = grad->g_ramp;                line = (TYPE *)(gd->canvasBuffer + gd->bpl*y);                point = &line[start];                /* if(((unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin))>ppmax)                return;                if(((unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin))<ppmin)                return;*/                //line1=(TYPE *)(currentpic->pp+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin));                line2 = (unsigned char *)currentmaskpointer +(gd->bpl*y)/2;                /* if(currentpic->fillflag==0)                 {                 currentpic->sp[y-idrect.Ymin].x1=start-idrect.Xmin;                 currentpic->sp[y-idrect.Ymin].x2=end-idrect.Xmin;                 }*/                point2=&line2[start];                r2 = r + n * dr;                if ( ((r | r2) & ~255) == 0 ) {                    if (!grad->g_has_alpha) {#ifdef FULL_AA                        if (start_alpha < 255) {                            v = r>>16;                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2=1;                            // *point1 = mix_alpha(*point, (TYPE)ramp[v].pixel, start_alpha);                            //*point1=*point;                            point2++;                            r += dr;                            n--;                        }#endif /* FULL_AA */                        while (n>0) {                            v = r>>16;                            //*point1 = (TYPE)ramp[v].pixel;                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2=1;                            //*point1=*point;                            point2++;                            r += dr;                            n--;                        }#ifdef FULL_AA                        if (end_alpha > 0) {                            v = r>>16;                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2=1;                            //*point1 = mix_alpha(*point, (TYPE)ramp[v].pixel, end_alpha);                            //*point1=*point;                        }#endif /* FULL_AA */                    } else {                        while (n--) {                            v = r>>16;                            cp = &ramp[v];                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2=1;                            //*point1 = mix_alpha(*point, cp->pixel, cp->Alpha);                            //*point1=*point;                            point2++;                            r += dr;                        }                    }                } else {//printf("in lg\n");                    if (!grad->g_has_alpha) {#ifdef FULL_AA                        if (start_alpha < 255) {                            v = r>>16;                            if (v < 0)                                v = 0;                            else if (v > 255)                                v = 255;                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2=1;                            // *point1 = mix_alpha(*point, (TYPE)ramp[v].pixel, start_alpha);                            //*point1=*point;                            point2++;                            r += dr;                            n--;                        }#endif /* FULL_AA */                        while (n>0) {                            v = r>>16;                            if (v < 0)                                v = 0;                            else if (v > 255)                                v = 255;                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2 =1;                            //*point1=*point;                            point2++;                            r += dr;                            n--;                        }#ifdef FULL_AA                        if (end_alpha > 0) {                            v = r>>16;                            if (v < 0)                                v = 0;                            else if (v > 255)                                v = 255;                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2=1;                            //*point1 = mix_alpha(*point, (TYPE)ramp[v].pixel, end_alpha);                            //*point1=*point;                        }#endif /* FULL_AA */                    } else {                        while (n--) {                            v = r>>16;                            if (v < 0)                                v = 0;                            else if (v > 255)                                v = 255;                            cp = &ramp[v];                            if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize))                                *point2=1;                            // *point1 = mix_alpha(*point, cp->pixel, cp->Alpha);                            //*point1=*point;                            point2++;                            r += dr;                        }                    }                }            }        }}voidfillLineRG16(GraphicDevice *gd,struct Gradient *grad, long y, long start, long end) {    //printf("to rg \n");    long X,dx,r,Y,dy;    long dist2;    register long   n;    Color *cp,*ramp;    TYPE *line,*line1,*ppmax,*ppmin;    TYPE *point,*point1;    unsigned char *point2,*line2;    Matrix *m = &grad->imat;    unsigned int start_alpha,end_alpha;    long start1,end1;    start1=start;    end1=end;    //printf("to filllinerg\n");    if(save==1&&currentpic&&gmaskflag==0) {        ppmax=(unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin+1)*(idrect.Ymax-idrect.Ymin+1);        ppmin=(unsigned long*)(currentpic->pp);        start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));        end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);        start /= FRAC;        end /= FRAC;        n = end-start;        X = (long) (m->ScaleX * start + m->RotateSkew0 * y + m->TranslateX);        Y = (long) (m->RotateSkew1 * start + m->ScaleY * y + m->TranslateY);        dx = (long) (m->ScaleX);        dy = (long) (m->RotateSkew1);        ramp = grad->g_ramp;        line = (TYPE *)(gd->canvasBuffer + gd->bpl*y);        point = &line[start];        if(((unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin))>ppmax)            return;        if(((unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin))<ppmin)            return;        line1=(TYPE *)(currentpic->pp+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin));        /* if(currentpic->fillflag==0)         {         currentpic->sp[y-idrect.Ymin].x1=start-idrect.Xmin;         currentpic->sp[y-idrect.Ymin].x2=end-idrect.Xmin;                  }*/        point1=&line1[start-idrect.Xmin];        if (!grad->g_has_alpha) {#ifdef FULL_AA            if (start == end) {                dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));                if ((unsigned long)dist2 >= 65536) {                    r = 255;                } else {                    r = SQRT[dist2];                }                if((point1<ppmax)&&(point1>ppmin))                    *point1=(((TYPE)ramp[r].pixel)&0x00FFFFFF)|(((start_alpha + end_alpha - 255)<<24)&(0xFF000000));                //  *point1 = mix_alpha(*point, (TYPE)ramp[r].pixel, start_alpha + end_alpha - 255);                // *point1=*point;            } else {                if (start_alpha < 255) {                    dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));                    if ((unsigned long)dist2 >= 65536) {                        r = 255;                    } else {                        r = SQRT[dist2];                    }                    if((point1<ppmax)&&(point1>ppmin))                        *point1=(((TYPE)ramp[r].pixel)&0x00FFFFFF)|(((start_alpha)<<24)&(0xFF000000));                    // *point1 = mix_alpha(*point, (TYPE)ramp[r].pixel, start_alpha);                    //*point1=*point;                    //point++;                    point1++;                    X += dx;                    Y += dy;                    n--;                }#endif /* FULL_AA */                while (n>0) {                    dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));                    if ((unsigned long)dist2 >= 65536) {                        r = 255;                    } else {                        r= SQRT[dist2];                    }                    if((point1<ppmax)&&(point1>ppmin))                        *point1=(((TYPE)ramp[r].pixel)&0x00FFFFFF)|((0xFF000000));                    //*point1 = (TYPE)ramp[r].pixel;                    //*point1=*point;                    //point++;                    point1++;                    X += dx;                    Y += dy;                    n--;                }#ifdef FULL_AA                if (end_alpha > 0) {                    dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));                    if ((unsigned long)dist2 >= 65536) {                        r = 255;                    } else {                        r= SQRT[dist2];                    }                    if((point1<ppmax)&&(point1>ppmin))                        *point1=(((TYPE)ramp[r].pixel)&0x00FFFFFF)|(((end_alpha)<<24)&(0xFF000000));                    //  *point1 = mix_alpha(*point, (TYPE)ramp[r].pixel, end_alpha);                    //*point1=*point;                }            }#endif /* FULL_AA */        } else {            while (n--) {                dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));                if ((unsigned long)dist2 >= 65536) {                    r = 255;                } else {                    r= SQRT[dist2];                }                cp = &ramp[r];                if((point1<ppmax)&&(point1>ppmin))                    *point1=((cp->pixel)&0x00FFFFFF)|(((cp->Alpha)<<24)&(0xFF000000));                //  *point1 = mix_alpha(*point, cp->pixel, cp->Alpha);                //*point1=*point;                //point++;                point1++;                X += dx;                Y += dy;            }        }        // else    } else        if(gmaskflag) {            {                struct MaskEntry *currentmaskentry;                unsigned char *currentmaskpointer;                currentmaskentry=player_p->_level0_p->mask_stack_p;                currentmaskpointer=currentmaskentry->maskpointer;                start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));                end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);                start /= FRAC;                end /= FRAC;                n = end-start;                X = (long) (m->ScaleX * start + m->RotateSkew0 * y + m->TranslateX);                Y = (long) (m->RotateSkew1 * start + m->ScaleY * y + m->TranslateY);                dx = (long) (m->ScaleX);                dy = (long) (m->RotateSkew1);                ramp = grad->g_ramp;                line = (TYPE *)(gd->canvasBuffer + gd->bpl*y);                point = &line[start];                /* if(((unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin))>ppmax)                return;                if(((unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin))<ppmin)                return;                 line1=(TYPE *)(currentpic->pp+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin));*/                line2 = (unsigned char *)currentmaskpointer +(gd->bpl*y)/2;                /* if(currentpic->fillflag==0)                 {                 currentpic->sp[y-idrect.Ymin].x1=start-idrect.Xmin;                 currentpic->sp[y-idrect.Ymin].x2=end-idrect.Xmin;                                  }*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -