int main(int ac,char *av[])
{
	png.Decode(av[1]);
	png.Flip();   // Need to flip upside down because glDrawPixels draws y=0 bottom.

	auxInitDisplayMode(AUX_DOUBLE|AUX_RGB);
	auxInitPosition(0,0,png.wid+2,png.hei+2);
	auxInitWindow(NULL);

	winWid=png.wid;
	winHei=png.hei;


	glViewport(0,0,png.wid,png.hei);

	int viewport[4];
	glGetIntegerv(GL_VIEWPORT,viewport);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0.0,(double)viewport[2],(double)viewport[3],0.0,-1.0,1.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glDisable(GL_DEPTH_TEST);

	auxReshapeFunc(ReshapeFunc);
	auxMainLoop(DisplayFunc);

	return 0;
}
void makegif::copyRGBA(YsRawPngDecoder &image1,YsRawPngDecoder &image2,TextString &str)
{
    dat=new unsigned char[48*picHeight*picWidth];
    unsigned char *dat2;
    dat2=new unsigned char[4*image1.wid*image1.hei];

    int position1[4];
    int position2[4];
    position1[0]=image1HeadLTx;
    position1[1]=image1HeadLTy;
    position1[2]=image1HeadRBx;
    position1[3]=image1HeadRBy;

    position2[0]=headLTx;
    position2[1]=headLTy;
    position2[2]=headRBx;
    position2[3]=headRBy;

    for(int y=0; y<image1.hei; ++y)
    {
        for(int x=0; x<image1.wid; ++x)
        {
            unsigned char *pix1=image1.rgba+(image1.wid*y+x)*4;
            dat2[(image1.wid*y+x)*4]=pix1[0];
            dat2[(image1.wid*y+x)*4+1]=pix1[1];
            dat2[(image1.wid*y+x)*4+2]=pix1[2];
            dat2[(image1.wid*y+x)*4+3]=pix1[3];
            pix1=NULL;
            delete pix1;
        }
    }

    for(int i=0; i<12; i++)
    {
        choose(image2,str);
        warpImage(image1,image2,position1,position2,0.0);
        image2.Flip();
        for(int y=0; y<picHeight; ++y)
        {
            for(int x=0; x<picWidth; ++x)
            {
                unsigned char *pix=image2.rgba+(picWidth*y+x)*4;
                dat[4*picWidth*picHeight*timeCounter+(picWidth*y+x)*4]=pix[0];
                dat[4*picWidth*picHeight*timeCounter+(picWidth*y+x)*4+1]=pix[1];
                dat[4*picWidth*picHeight*timeCounter+(picWidth*y+x)*4+2]=pix[2];
                dat[4*picWidth*picHeight*timeCounter+(picWidth*y+x)*4+3]=pix[3];
            }
        }

        for(int y=0; y<image1.hei; ++y)
        {
            for(int x=0; x<image1.wid; ++x)
            {
                unsigned char *pix3=dat2+(image1.wid*y+x)*4;
                image1.rgba[(image1.wid*y+x)*4]=pix3[0];
                image1.rgba[(image1.wid*y+x)*4+1]=pix3[1];
                image1.rgba[(image1.wid*y+x)*4+2]=pix3[2];
                image1.rgba[(image1.wid*y+x)*4+3]=pix3[3];
                pix3=NULL;
                delete pix3;
            }
        }

        image2.Flip();
        timerFired();
    }
    delete [] dat2;
}