void CRGBABufferImplicitBufferAdapter::get(CArray2Drgba &out) { if(!m_source) return; CArray2Dd tmp; tmp.resize(out.width(), out.height()); m_source->get(tmp); for(int x=0; x<out.width(); ++x) { for(int y=0; y<out.height(); ++y) { ANLFloatType v=tmp.get(x,y); out.set(x,y,SRGBA(v,v,v,1)); } } }
void mapRGBA2DNoZ(int seamlessmode, CArray2Drgba &a, CRGBAModuleBase &m, SMappingRanges &ranges) { size_t w=a.width(); size_t h=a.height(); static double pi2=3.141592*2.0; size_t x,y; for(x=0; x<w; ++x) { for(y=0; y<h; ++y) { double p=(double)x / (double)w; double q=(double)y / (double)h; double nx,ny,nz,nw=0.0; SRGBA val; double dx, dy; switch(seamlessmode) { case SEAMLESS_NONE: { nx=ranges.mapx0 + p*(ranges.mapx1-ranges.mapx0); ny=ranges.mapy0 + q*(ranges.mapy1-ranges.mapy0); val=m.get(nx,ny); } break; case SEAMLESS_X: { dx=ranges.loopx1-ranges.loopx0; dy=ranges.mapy1-ranges.mapy0; p=p*(ranges.mapx1-ranges.mapx0)/(ranges.loopx1-ranges.loopx0); nx=ranges.loopx0 + cos(p*pi2) * dx/pi2; ny=ranges.loopx0 + sin(p*pi2) * dx/pi2; nz=ranges.mapy0 + q*dy; val=m.get(nx,ny,nz); } break; case SEAMLESS_Y: { dx=ranges.mapx1-ranges.mapx0; dy=ranges.loopy1-ranges.loopy0; q=q*(ranges.mapy1-ranges.mapy0)/(ranges.loopy1-ranges.loopy0); nx=ranges.mapx0 + p*dx; ny=ranges.loopy0 + cos(q*pi2) * dy/pi2; nz=ranges.loopy0 + sin(q*pi2) * dy/pi2; val=m.get(nx,ny,nz); } break; case SEAMLESS_XY: { dx=ranges.loopx1-ranges.loopx0; dy=ranges.loopy1-ranges.loopy0; p=p*(ranges.mapx1-ranges.mapx0)/(ranges.loopx1-ranges.loopx0); q=q*(ranges.mapy1-ranges.mapy0)/(ranges.loopy1-ranges.loopy0); nx=ranges.loopx0 + cos(p*pi2) * dx/pi2; ny=ranges.loopx0 + sin(p*pi2) * dx/pi2; nz=ranges.loopy0 + cos(q*pi2) * dy/pi2; nw=ranges.loopy0 + sin(q*pi2) * dy/pi2; val=m.get(nx,ny,nz,nw); } break; default: break; } a.set((int)x,(int)y,val); } } }