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));
            }
        }
    }
Ejemplo n.º 2
0
   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);
            }
        }
   }