📄 render_rend.c.svn-base
字号:
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&¤tpic&&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 + -