📄 render_rend.c.svn-base
字号:
end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; point1=&line1[start-idrect.Xmin]; if (start == end) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|(((start_alpha + end_alpha - 255)<<24)&(0xff000000)); } else { n = end-start; if (start_alpha < 255) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((start_alpha<<24)&(0xFF000000)); point1++; n--; } while (n > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1 = pixel; point1++; n--; } if (end_alpha > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((end_alpha<<24)&(0xFF000000)); } } } else { start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS)); end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; point1=&line1[start-idrect.Xmin]; if (start == end) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|(((((start_alpha + end_alpha - 255) * alpha) >> 8)<<24)&(0xFF000000)); } else { n = end-start; if (start_alpha < 255) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((((start_alpha * alpha) >> 8)<<24)&(0xFF000000)); point1++; n--; } while (n > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((alpha<<24)&(0xFF000000)); point1++; n--; } if (end_alpha > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((((end_alpha * alpha) >> 8)<<24)&(0xFF000000)); } } } } else if(gmaskflag) { struct MaskEntry *currentmaskentry; unsigned char *currentmaskpointer; currentmaskentry=player_p->_level0_p->mask_stack_p; currentmaskpointer=currentmaskentry->maskpointer; line2 = (unsigned char *)currentmaskpointer +(gd1->bpl*y)/2; if (alpha == ALPHA_OPAQUE) { start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS)); end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; //point1=&line1[start-idrect.Xmin]; point2=&line2[start]; if (start == end) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } else { n = end-start; if (start_alpha < 255) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; point2++; n--; } while (n > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2 = 1; point2++; n--; } if (end_alpha > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } } } else { start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS)); end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; point2=&line2[start]; if (start == end) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } else { n = end-start; if (start_alpha < 255) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; point2++; n--; } while (n > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; point2++; n--; } if (end_alpha > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } } } }}voidfillLineAA161(GraphicDevice *gd1,FillStyleDef *f, long y, long start, long end) { register long n; long start1,end1,start2,end2; TYPE *line,*line1; TYPE *point,pixel,*point1,*ppmax,*ppmin; unsigned char *point2,*line2; unsigned long alpha, start_alpha,end_alpha; start1=start; end1=end; start2=start; end2=end; start2 >>= FRAC_BITS; end2 >>= FRAC_BITS; alpha = f->Color.Alpha; pixel = f->Color.pixel; if(start>end) start=end; if(save==1&¤tpic&&gmaskflag==0) { if(currentpic) { ppmax=(unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin+1)*(idrect.Ymax-idrect.Ymin+1); ppmin=(unsigned long*)(currentpic->pp); } 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 *) ((unsigned long*)(currentpic->pp)+(idrect.Xmax-idrect.Xmin)*(y-idrect.Ymin)); // printf("x1 is %ld x2 is %ld\n",currentpic->sp[y-idrect.Ymin].x1,currentpic->sp[y-idrect.Ymin].x2); /* if(currentpic->fillflag==0) { //if(start-idrect.Xmin<=currentpic->sp[y-idrect.Ymin].x1) currentpic->sp[y-idrect.Ymin].x1=start-idrect.Xmin-1; //if(end-idrect.Xmin>=currentpic->sp[y-idrect.Ymin].x2) currentpic->sp[y-idrect.Ymin].x2=end-idrect.Xmin+1; // printf("x1 is %ld x2 is %ld\n",currentpic->sp[y-idrect.Ymin].x1,currentpic->sp[y-idrect.Ymin].x2); }*/ if (alpha == ALPHA_OPAQUE) { start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS)); end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; point1=&line1[start-idrect.Xmin]; if (start == end) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|(((start_alpha + end_alpha - 255)<<24)&(0xff000000)); } else { n = end-start; if (start_alpha < 255) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((start_alpha<<24)&(0xFF000000)); point1++; n--; } while (n > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1 = pixel; point1++; n--; } if (end_alpha > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((end_alpha<<24)&(0xFF000000)); } } } else { start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS)); end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; point1=&line1[start-idrect.Xmin]; if (start == end) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|(((((start_alpha + end_alpha - 255) * alpha) >> 8)<<24)&(0xFF000000)); } else { n = end-start; if (start_alpha < 255) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((((start_alpha * alpha) >> 8)<<24)&(0xFF000000)); point1++; n--; } while (n > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((alpha<<24)&(0xFF000000)); point1++; n--; } if (end_alpha > 0) { if((point1<ppmax)&&(point1>ppmin)) *point1=(pixel&0x00FFFFFF)|((((end_alpha * alpha) >> 8)<<24)&(0xFF000000)); } } } } else if(gmaskflag) { struct MaskEntry *currentmaskentry; unsigned char *currentmaskpointer; currentmaskentry=player_p->_level0_p->mask_stack_p; currentmaskpointer=currentmaskentry->maskpointer; line2 = (unsigned char *)currentmaskpointer +(gd1->bpl*y)/2; if (alpha == ALPHA_OPAQUE) { start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS)); end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; //point1=&line1[start-idrect.Xmin]; point2=&line2[start]; if (start == end) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } else { n = end-start; if (start_alpha < 255) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; point2++; n--; } while (n > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2 = 1; point2++; n--; } if (end_alpha > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } } } else { start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS)); end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS); start >>= FRAC_BITS; end >>= FRAC_BITS; point2=&line2[start]; if (start == end) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } else { n = end-start; if (start_alpha < 255) { if((((unsigned long)(point1)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point1)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; point2++; n--; } while (n > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; point2++; n--; } if (end_alpha > 0) { if((((unsigned long)(point2)-(unsigned long)(currentmaskpointer))>0)&&(((unsigned long)(point2)-(unsigned long)(currentmaskpointer))<canvassize)) *point2=1; } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -