MCPcopy Create free account
hub / github.com/DFHack/dfhack / plotLineAA

Function plotLineAA

plugins/rendermax/renderer_light.cpp:210–258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

208 return ;
209}
210void plotLineAA(int x0, int y0, int x1, int y1,rgbf power,const std::function<rgbf(rgbf,int,int,int,int)>& setPixelAA)
211{
212 int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;
213 int dy = abs(y1-y0), sy = y0<y1 ? 1 : -1;
214 int err = dx-dy, e2, x2; /* error value e_xy */
215 int ed = dx+dy == 0 ? 1 : sqrt((float)dx*dx+(float)dy*dy);
216 int rdx=0;
217 int rdy=0;
218 int lrdx,lrdy;
219 rgbf sumPower;
220 for ( ; ; ){ /* pixel loop */
221 float strsum=0;
222 float str=1-abs(err-dx+dy)/(float)ed;
223 strsum=str;
224 sumPower=setPixelAA(power*str,rdx,rdy,x0,y0);
225 e2 = err; x2 = x0;
226 lrdx=rdx;
227 lrdy=rdy;
228 rdx=rdy=0;
229 if (2*e2 >= -dx) { /* x step */
230 if (x0 == x1) break;
231
232 if (e2+dy < ed)
233 {
234 str=1-(e2+dy)/(float)ed;
235 sumPower+=setPixelAA(power*str,lrdx,lrdy,x0,y0+sy);
236 strsum+=str;
237 }
238 err -= dy; x0 += sx; rdx=sx;
239 }
240 if (2*e2 <= dy) { /* y step */
241 if (y0 == y1) break;
242
243 if (dx-e2 < ed)
244 {
245 str=1-(dx-e2)/(float)ed;
246 sumPower+=setPixelAA(power*str,lrdx,lrdy,x2+sx,y0);
247 strsum+=str;
248 }
249 err += dx; y0 += sy; rdy=sy;
250 }
251 if(strsum<0.001f)
252 return;
253 sumPower=sumPower/strsum;
254 if(sumPower.dot(sumPower)<0.00001f)
255 return;
256 power=sumPower;
257 }
258}
259rgbf blendMax(const rgbf& a,const rgbf& b)
260{
261 return rgbf(std::max(a.r,b.r),std::max(a.g,b.g),std::max(a.b,b.b));

Callers

nothing calls this directly

Calls 1

dotMethod · 0.80

Tested by

no test coverage detected